如何在没有doc上下文的情况下去除spacy文本?

lau*_*man 2 nlp spacy

我有一个序列来训练由spacy的标记化形成的标记的模型.这是编码器和解码器.

输出是来自seq2seq模型的标记流.我想说明文本以形成自然文本.

例:

输入到Seq2Seq:一些文本

Seq2Seq的输出:这不起作用.

spacy中是否有任何API可以反转其tokenizer中规则所做的标记化?

syl*_*sm_ 5

内部spaCy跟踪一个布尔数组来判断标记是否有尾随空格.您需要此数组将字符串重新组合在一起.如果您使用的是seq2seq模型,则可以单独预测空格.

詹姆斯布拉德伯里(TorchText的作者)向我抱怨这件事.当我在spaCy中设计标记化系统时,他没有考虑seq2seq模型.他开发了revtok来解决他的问题.

基本上什么是revtok(如果我理解的话)是在lexeme ID上加两个额外的位:lexeme是否与前面的空格有亲和力,以及它是否与后续空格有亲和力.空格被插入到其词汇具有空间亲和力的令牌之间.

以下是为spaCy Doc找到这些位的代码:

def has_pre_space(token):
    if token.i == 0:
        return False
    if token.nbor(-1).whitespace_:
        return True
    else:
        return False

def has_space(token):
    return token.whitespace_
Run Code Online (Sandbox Code Playgroud)

诀窍是,当你删除一个空间无论是当前语义说"不尾随空格" 下一个语义说"不领先的空间".这意味着您可以使用频率统计来判断这两个词位中的哪一个因缺少空间而"责备".

詹姆斯的观点是,这种策略为单词预测决策增加了很少的熵.替代方案将使用hello.或等条目扩展词典"Hello.他的做法既不的,因为你可以串码hello.为任一(hello, 1, 0), (., 1, 1)或作为(hello, 1, 0), (., 0, 1).这个选择很简单:我们绝对应该"责备"缺乏空间的时期.