NLP - 如何进行语义分析?

数据挖掘 机器学习 Python nlp 情绪分析 斯坦福-nlp
2021-09-22 03:11:21

我想进行文本/情感分析。

我能够分析带有 3 个标签的样本:(positive, neutral, negative)我使用了 SVM、随机森林、逻辑回归和梯度提升等算法。

我的脚本工作正常,并且通过交叉验证,我可以采用 4 种算法中最好的算法。

我使用带有 python 函数“Countvectorizer”的监督算法

但是我的老板在网上打了“NLP”,看了一些文章。

他告诉我:“这 3 个输出还不够,我想要一个完整的语义分析,可以解释句子的全局含义”

他似乎对有监督和无监督算法没有偏好。

他告诉我,他想要一个算法能够判断“公司总裁入狱”等同于“首席执行官入狱”。

那么您知道如何执行此操作吗?以及如何在 Python 中实现它?我想我们需要一个充满单词的大数据库,我知道这不是一个非常具体的问题,但我想向他展示所有的解决方案。

让我害怕的是他似乎对此不太了解,例如他告诉我“你必须减少数据集的高维”,而我的数据集只有 2000 个文本字段。

非常感谢您的回答:)

1个回答

使用您的三个标签:正面、中性或负面 - 您似乎更多地谈论情绪分析这就回答了这个问题:写这段文字的人的情绪是什么?

语义分析是一个更大的术语,意思是分析文本中包含的含义,而不仅仅是情感。它寻找单词之间的关系,它们如何组合以及某些单词出现在一起的频率。

为了更深入地了解您的文本,您可以阅读以下主题:

  • 一般来说,语义分析可能指的是您的起点,您在此处解析一个句子以理解和标记各个词类 (POS)。Python 中的一个工具是spaCy,它的文字非常好,还提供了可视化来展示给你的老板。
  • 命名实体识别 (NER) - 查找引用实体的词性 (POS) 并将它们链接到文本中稍后出现的代词。一个例子是区分苹果公司和苹果水果。
  • 嵌入 - 查找单个单词的潜在表示,例如使用Word2Vec文本经过处理,以 n 维向量的形式为单个单词生成单个嵌入。然后,您可以计算某些单词的向量之间的相似性度量(例如余弦相似性),以分析它们之间的相关性。
  • Lemmatisation - 这种方法将许多形式的词减少到它们的基本形式,这意味着它们出现得更频繁,我们不认为例如动词变位是单独的词。例如,tracking, tracked, tracker, 可能都简化为基本形式:track.

您的下一步可能是搜索我提到的任何这些术语的博客和介绍。

这是一个来自 spaCy 的示例分析树:

示例解析树


缩小尺寸

然后,这将引用向量,这些向量描述了您的每个单词。一般来说,Word2Vec向量大约是 300 维的。您可能想要可视化单词,将它们绘制在 2d 空间中。您可以尝试像t-SNE这样的方法,它将 300d 向量映射到 2d 空间,允许显示关系的漂亮图,同时保留 300d 空间中描述的尽可能多的原始关系。当然,会有一些信息丢失,但你一开始就无法可视化 300d 向量!

使用单词的向量,您可以计算类似 0.92 和 0.92 之间的相似度(范围在 0 和 1 之间)president-CEO这意味着它们几乎是同义词!