搜索令牌出现的上下文
contextSearching的Python项目详细描述
简介
给定一个单词标记和一个单词出现的语料库,这个包可以帮助您找到并分析单词出现的上下文。可以很容易地利用它来改进基于单词的分析。在
安装
pip install contextSearching
使用
作为一个例子来说明这个用法,我们选择了术语“break”和Amazon review语料库for Nintendo Switch,其中人们使用了“break”。在
从一个简单的词袋分析,我们知道,每当人们提到“打破”,该产品很可能获得低星级评级。但我们不知道什么是中断,也不知道“中断”的其他上下文
准备
^{pr2}$加载包并初始化类
"""Loading the package and initialize the class"""fromcontextSearchingimportcontext_searchingcs=context_searching(target_token=target,doc=corpus['reviews'],left_window=5,right_window=5,padding_token="_empty_")
除了目标标记和语料库外,该类还需要三个输入:左/右窗口和填充标记。在
该算法接收目标令牌并积极收集指定窗口内的所有单词。在
例如,当left_window设置为10时,它将在语料库的每个文档中找到目标标记,然后收集目标左侧的所有10个单词,记录相对位置。如果左边少于10个单词,则算法将在单词列表中添加填充标记。在
获取上下文探测矩阵
"""Get the Context Probing Matrix"""# Get a list of stopwordsfromgensim.parsing.preprocessingimportSTOPWORDSstopwords=list(STOPWORDS)contextPMat=cs.get_context_prob_matrix(stop_words=stopwords,lemmatize=True,stem=False)
假设语料库中有N个文档,左窗和右窗设置为5。上下文探测矩阵(CPM)是一个N×11矩阵,如下所示:
# We can examine the actual CPM like this:cpm_df=pd.DataFrame(np.array(contextPMat.context_prob_matrix))cpm_df.columns=[str(x)forxincontextPMat.position_idx]cpm_df.head()
列索引指示相对位置。例如,在第一个文档中,单词“button”出现在目标术语“break”右侧的两个单词。在
获取词汇词典
"""Get the vocabs dictionary"""contextPMat.vocabs['joycon']
[-1, -1, -4, -2, -2, -1, -2, 1]
vocabs是一个字典,它的键是构造CPM时收集的唯一标记,值是记录的与目标标记相对位置的列表。在
在上面的输出中,我们看到术语“joycon”在目标项的+-5窗口内总共出现了8次。它最常出现在目标词的左边。在
获取每个术语的统计表
"""Get the statistics table for each term"""cpm_stats=contextPMat.get_cpm_stats_tb()cpm_stats.cpm_stats_tb.head()
为了理解上下文,我们可以查看上面收集的每个术语的相对位置的统计数据。在
例如
当一个术语出现率很高时,我们知道它总是出现在目标令牌周围
当一个项的相对位置的方差较低时,我们知道它总是出现在相同的相对位置
推断含有目标项
"""Infer potential N-grams containing the term"""cpm_stats.guess_ngram(n=5)
根据统计表,该算法可以推断出包含目标项的最有可能的n元
例如,当我们想推断单词最有可能出现在“break”的左边(即相对位置=-1)时,我们要执行以下步骤
- 从上述CPM构建过程中收集的单词开始(例如“controller”)
- 换句话说,取观察到的相对位置的平均值,减去-1的平均值,然后取绝对值
- 换句话说,取观察到的相对位置的中间值,减去中间值-1,然后取绝对值
- 计算1/计数
- 计算单词相对位置的方差
- 在所有收集到的单词上重复上述步骤,并获得上述4个指标列表(abs中值差异、abs平均差异、1/count、variance)
- 规范化4个列表
- 对于每个收集到的单词,用用户定义的权重乘以它的4个指标,然后取总和得到最终得分
位置-1的最佳候选词的最终得分最小。在
当我们想找到最有可能的三元图时,算法考虑在每个可能的位置都有一个目标标记的三元图。因此,在上面的示例输出中,目标术语“break”出现为第5、第4、第3,n元上的第2项和第1项。在
现在我们得到了更多关于“中断”的上下文:
昂贵的Joycon控制器在数月内坏掉似乎是个问题。在
一些注意事项
- 在
目前,当目标术语在一个文档中出现多次时,CPM只考虑第一个。我会在不久的将来改善这一点
在 - 在
当我们有更多的文档而每个文档都很短时,这种方法效果更好。例如,它在收集新闻文章时不会起到很好的作用。在
在
- 项目
标签: