首页 文章

Applied NLP:如何根据多字词的词汇对文档进行评分?

提问于
浏览
1

这可能是一个相当基本的NLP问题,但我手头有以下任务:我有一组文本文档,我需要根据一个(英语)词汇进行评分,这些词汇可以是1-,2-,3-等 N - 字长 . N 受到一些"reasonable"数字的限制,但字典中各种术语的分布对于 n = 1, ..., N 的各种值可能相当均匀 . 例如,该词典可以包含某种类型的设备列表,并且我想查看给定文档是否可能与这些设备中的任何设备有关 . 因此,如果文档中出现任何一个或多个词典条目,我希望将文档评分为高(呃) .

什么是标准NLP技术进行评分,同时考虑可能出现在词典中的各种形式的单词?输入文档和词典都需要进行哪种预处理才能执行评分?预处理和评分都有哪种开源工具?

1 回答

  • 2

    我差不多一年前研究了LSI和主题建模,所以我所说的应该只是一个指针,让你大致了解在哪里看 .

    有许多不同的方法可以做到这一点,取得了不同程度的成功 . 这是information retrieval领域的一个难题 . 您可以搜索topic modeling以了解不同的选项和最新技术 .

    如果单词可以以不同的形式出现,你肯定需要一些预处理和规范化 . NLTK和它的一个提取器怎么样:

    >>> from nltk.stem.lancaster import LancasterStemmer
    >>> st = LancasterStemmer()
    >>> st.stem('applied')
    'apply'
    >>> st.stem('applies')
    'apply'
    

    你有一个术语词汇,我将称之为术语,也是一堆文档 . 我将探索一种非常基本的技术来对文档进行排名 . 你可以阅读更多更复杂的方法,但我认为如果你不寻找太复杂和严谨的东西,这可能就足够了 .

    这称为矢量空间IR模型 . 术语和文档都转换为k维空间中的向量 . 为此,我们必须构建逐个文档矩阵 . 这是一个样本矩阵,其中数字代表文档中术语的频率:

    enter image description here

    到目前为止,我们有一个3x4矩阵,使用该矩阵可以用三维数组(每列)表示每个文档 . 但随着术语数量的增加,这些数组变得太大而且越来越稀疏 . 此外,在大多数文档中都会出现许多单词,例如 Iand ,而不会添加太多语义内容 . 所以你可能想忽略这些类型的单词 . 对于大和稀疏的问题,您可以使用称为SVD的数学技术,该技术缩小矩阵,同时保留它包含的大部分信息 .

    此外,我们在上图中使用的数字是原始计数 . 另一种技术是使用布尔值:1表示存在,0表示文档中缺少术语 . 但是这些假设词语具有相同的语义权重 . 实际上,罕见的词比普通词更重要 . 因此,编辑初始矩阵的一种好方法是使用tf-id等排名函数为每个术语指定相对权重 . 如果到现在为止我们已经将SVD应用于我们的加权逐个文档矩阵,我们可以构造k维查询向量,它们只是术语权重的数组 . 如果我们的查询包含同一术语的多个实例,则可以使用频率和术语权重的乘积 .

    我们需要做的事情有点直截了当 . 我们通过分析它们的cosine similarities来比较查询向量和文档向量,这将是文档相对于查询的排名的基础 .

相关问题