gpt4 book ai didi

python - SpaCy 如何在标记化过程中跟踪字符和标记偏移量?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:10:41 26 4
gpt4 key购买 nike

SpaCy 如何在标记化期间跟踪字符和标记偏移量?

在 SpaCy 中,有一个 Span 对象保存 token /跨度的开始和结束偏移量 https://spacy.io/api/span#init

有一个 _recalculate_indices方法似乎正在检索 token_by_starttoken_by_end 但看起来所有的重新计算都在进行。

当查看无关空间时,它正在做一些 smart alignment of the spans .

它是否在每次执行正则表达式后重新计算,是否跟踪角色的移动?它会执行后正则表达式跨度搜索吗?

最佳答案

总结:
在标记化过程中,this是跟踪偏移量和字符的部分。

简单的答案:它在字符串中逐个字符。

TL;DR 在底部。


逐 block 解释:

它接受要标记化的字符串,并开始一次迭代一个字母/空格。

这是一个简单的 for 循环,其中 uc 是字符串中的当前字符。

for uc in string:

它首先检查当前字符是否为空格,然后比较最后的 in_ws 设置是否与是否为空格相反。如果相同,则向下跳转并增加i += 1

in_ws 被用来知道它是否应该处理。他们想在空间和字符上做事,所以他们不能只跟踪 isspace() 并只对 False 进行操作。相反,当它第一次启动时,in_ws 被设置为 string[0].isspace() 的结果,然后与自身进行比较。如果 string[0] 是一个空格,它将计算相同的值并因此跳下并增加 i(稍后讨论)并转到下一个 uc 直到它到达一个与第一个不同的 uc。在实践中,这允许它在处理完第一个空格或多个字符后依次遍历多个空格,直到到达下一个空格边界。

    if uc.isspace() != in_ws:

它将继续遍历字符直到到达下一个边界,保持当前字符的索引为i

它跟踪两个索引值:startistart 是它所在的潜在标记的开始,i 是它正在查看的结束字符。当脚本启动时,start 将为 0。这样一个循环之后,start 将是最后一个空格的索引加 1,这将使它成为当前单词的第一个字母。

它首先检查 start 是否小于 i,后者用于了解是否应该尝试检查缓存并标记当前字符序列。这将更有意义。

        if start < i:

span 是当前正在考虑标记化的词。它是由start索引值通过i索引值切片的字符串。

            span = string[start:i]

然后它获取单词的散列值(starti)并检查缓存字典以查看该单词是否已被处理。如果没有,它将在字符串的那部分调用 _tokenize 方法。

            key = hash_string(span)
cache_hit = self._try_cache(key, doc)
if not cache_hit:
self._tokenize(doc, span, key)

接下来它检查当前字符 uc 是否是一个精确的空格。如果是,它会将 start 重置为 i + 1,其中 i 是当前字符的索引。

        if uc == ' ':
doc.c[doc.length - 1].spacy = True
start = i + 1

如果字符不是空格,则将 start 设置为当前字符的索引。然后它反转 in_ws,表明它是一个字符。

        else:
start = i
in_ws = not in_ws

然后它增加 i += 1 并循环到下一个字符。

    i += 1

长话短说
综上所述,它使用 i 跟踪字符串中的字符,并使用 start 保留单词的开头。 start 在单词处理结束时重置为当前字符,然后在空格后设置为最后一个空格加一(下一个单词的开头)。

关于python - SpaCy 如何在标记化过程中跟踪字符和标记偏移量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55348709/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com