有没有一种方法可以只对单词进行矢量化,即不从python中的语料库或单词包中进行矢量化?

有没有一种方法可以只对单词进行矢量化,即不从python中的语料库或单词包中进行矢量化?,python,nlp,cosine-similarity,Python,Nlp,Cosine Similarity,我的用例是将两个列表中的单词矢量化,如下所示 ListA = [Japan, Electronics, Manufacturing, Science] ListB = [China, Electronics, AI, Software, Science] 我知道word2vec和Glove可以将单词矢量化,但它们是通过语料库或一袋单词来实现的,也就是说,我们必须将句子分解成标记,然后再进行矢量化 有没有一种方法可以将列表中的单词矢量化 另外,我对NLP方面的事情还不熟悉,因此请原谅我所说的任

我的用例是将两个列表中的单词矢量化,如下所示

ListA = [Japan, Electronics, Manufacturing, Science]

ListB = [China, Electronics, AI, Software, Science]
我知道word2vec和Glove可以将单词矢量化,但它们是通过语料库或一袋单词来实现的,也就是说,我们必须将句子分解成标记,然后再进行矢量化

有没有一种方法可以将列表中的单词矢量化


另外,我对NLP方面的事情还不熟悉,因此请原谅我所说的任何明显的观点。

您可能想要的只是经过预培训的嵌入。是这样吗?如果是,您可以使用以下方法:

import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(' '.join(ListA+ListB))

for token1 in tokens:
    for token2 in tokens:
        print(token1.text, token2.text, token1.similarity(token2))
以下是您如何按照余弦值的降序对其进行排序,以回答我在其他评论中提出的问题:

import spacy

nlp = spacy.load('en_core_web_md')
tokens = nlp(' '.join(ListA+ListB))
list_to_sort = []

for token1 in tokens:
    for token2 in tokens:
        list_to_sort.append((token1.text, token2.text, token1.similarity(token2))

sorted_list = sorted(list_to_sort, key=lambda x: x[2], reverse=True)
print(sorted_list)

我假设您希望看到ListA中与ListB中每个单词最相似的前3个单词。如果是这样,这是您的解决方案,如果您希望列表B中的所有顶级类似单词,我也为此添加了可选行:

import spacy

nlp = spacy.load('en_core_web_md')
tokensA = nlp(' '.join(ListA))
# use if wanting tokens in ListB compared to all tokens present: tokensA = nlp(' '.join(ListA+ListB))
tokensB = nlp(' '.join(ListB))

output_mapping = {tokenB.text: [] for tokenB in tokensB}
for tokenB in tokensB:
    for tokenA in tokensA:
        # add the tuple to the current list & sort by similarity
        output_mapping[tokenB.text].append((tokenA.text, tokenB.similarity(tokenA)))
        output_mapping[tokenB.text] = list(sorted(output_mapping[tokenB.text], key=lambda x: x[1], reverse=True))

for tokenB in sorted(output_mapping.keys()):
    # print token from listB and the top 3 similarities to list A, sorted
    print(tokenB, output_mapping[key][:3])

你好,伊萨科赫。谢谢你的回答。for循环中的token1和token2会迭代ListA和ListB并存储它们的值吗?当我运行此for循环时,发现一个错误“str”对象没有属性“text”。@RidhimaKumar非常抱歉-我忘记在stringHi@Ethan上调用nlp,没问题,我发现了。它现在运行得很好。最后一个问题。我得到了具有相应余弦值的单词对。如何按余弦值的降序排序。例如,我有日本-中国0.3,日本-电子0.5,日本-AI0.2。我希望它是按降序排列,并打印该对的后半部分,即中国,电子,人工智能分别。再次非常感谢你帮助我这样的NLP新手。我在这个问题上添加了另一个答案。一定要投票!很乐意帮忙,你好,伊桑。上面的代码通过降低余弦值对单词对进行排序。如何为每个单词找到前3个相似的单词。输出示例为内联“中日0.7,中国-电子0.6,中国-科学0.6”Hi@Ethan。上面的代码通过降低余弦值对单词对进行排序。如何为每个单词找到前3个相似的单词。输出示例为“中国-日本0.7,中国-电子0.6,中国-科学0.6”。基本上,对于ListB中的每个单词,都需要对应的前3个映射。嗨,有没有办法在Spacy的模型中为标记添加异常?我的意思是,我有两个列表ListA=[日本,电子,制造,科学,云]ListB=[中国,机器学习,人工智能,软件开发,科学,云计算]。相似性给了我云,云代替了云,云计算。是否有一种方法允许“nlp”对象保留带有空格的令牌。目前,如果代币之间有空格,它似乎会将代币一分为二。