python-3.x - 将具有相同含义的单词分类

标签 python-3.x machine-learning nlp nltk text-processing

我有 50,000 个电子邮件主题行,我想根据同义词或可以代替其他词使用的单词对其中的单词进行分类。

例如:

销量最高!

最佳销量

我希望他们在同一个组中。

我使用 nltk 的 wordnet 构建了以下函数,但效果不佳。

def synonyms(w,group,guide):
    try:
         # Check if the words is similar
        w1 = wordnet.synset(w +'.'+guide+'.01')
        w2 = wordnet.synset(group +'.'+guide+'.01')

        if w1.wup_similarity(w2)>=0.7:
             return True

        elif w1.wup_similarity(w2)<0.7:
            return False

    except:
         return False

有什么想法或工具可以实现这一目标吗?

最佳答案

实现这一点的最简单方法是比较各个词嵌入的相似性(最常见的实现是 Word2Vec)。

Word2Vec 是一种在向量空间中表示标记语义的方法,它可以比较单词的含义,而不需要像 WordNet 这样的大型词典/同义词库。

Word2Vec 常规实现的一个问题是它确实区分同一单词的不同含义。例如,单词 bank 在所有这些句子中将具有相同的 Word2Vec 表示形式:

  • 干涸了。
  • 银行借钱给我。
  • 飞机可能向左倾斜

银行在每种情况下都有相同的向量,但您可能希望将它们分类到不同的组中。

解决此问题的一种方法是使用 Sense2Vec 实现。 Sense2Vec 模型考虑了标记的上下文和词性(以及可能的其他特征),使您能够区分单词不同含义的含义。

Python 中一个很棒的库是 Spacy 。它就像 NLTK,但是much faster正如用 Cython 编写的那样(标记化速度快 20 倍,标记速度快 400 倍)。它还内置了 Sense2Vec 嵌入,因此您无需其他库即可完成相似性任务。

很简单:

import spacy

nlp = spacy.load('en') 

apples, and_, oranges = nlp(u'apples and oranges')
apples.similarity(oranges)

它是免费的并且拥有自由许可证!

关于python-3.x - 将具有相同含义的单词分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42698919/

相关文章:

Python 3.x 意外的 TypeError 电话簿

machine-learning - 朴素贝叶斯分类器偏置输出?

python - 机器学习: How to regularize output and force them to be away from 0?

java - 在Android中部署SimpleNLG,NoClassDefFoundError

nlp - 如何使用 DeepPavlov 进行文本分类

python-3.x - 在 jupyter notebook 中导入本地模块

python - 是否可以根据变量从大量模块中选择一个函数(不使用 if,变化太多)?

html - 从 Yahoo! 上抓取头条新闻使用 Python3 进行财务

java - Weka 如何使用 Java 代码预测新的未见过的实例?

python - doc2vec 中单个文档的多个标签。标签文档