Doc2vec '-' 符号出现

数据挖掘 nlp word2vec 词嵌入 nltk
2022-02-14 11:25:11

目前正在研究简历解析器,并努力在其中嵌入带有“-”符号的单词。比如“IT经理”。

这些词的向量表示被 doc2vec 错误地分类。

['it-manager'] [('salary', 0.23328335583209991), ('responsibilites', 0.22327110171318054), ('schedule', 0.14869527518749237), ('position', 0.12755176424980164)]

但是当我删除“-”符号时,它被标记化并正确分类。

['it', 'manager'] [('position', 0.9306046962738037), ('schedule', 0.6630333662033081), ('responsibilites', 0.6081600189208984), ('salary', 0.5934453010559082)]

您如何正确处理此类数据?对于这种任务,我想,最好排除符号。但是可能有一种方法可以告诉 Doc2vec 将这些词视为两个不同的词。或者也许告诉 word_tokenizer 以这种方式标记它们?

2个回答

gensim 的Phrases模块也可能有帮助:

from gensim.models import Phrases
documents = [
    "the mayor of new york was there",
    "machine learning can be useful sometimes",
    "new york mayor was present"
]

sentence_stream = [doc.split(" ") for doc in documents]

bigram = Phrases(sentence_stream, min_count=1, threshold=2)

sent = [u'the', u'mayor', u'of', u'new', u'york', u'was', u'there']
print(bigram[sent])
# Expected output:
# [u'the', u'mayor', u'of', u'new_york', u'was', u'there']

该代码来自另一个答案(为方便起见,我已将其复制粘贴在上面)。

有关该Phrases模块的更多信息,请查看此页面

通常,您会想要删除任何对标记含义没有贡献的符号。在 'it-manager' 的情况下,删除 - 你不会负面地影响对这个词的解释。我建议过滤您的词汇表以识别所有带有其他符号的单词,并判断您是否可以在不影响单词解释的情况下过滤符号。

您可以使用正则表达式过滤器来执行此操作,例如:

m = re.search(r'[^\w]', <some string>)