当前位置: 首页 > 后端技术 > Python

5个很少被提及但可以提高NLP工作效率的Python库

时间:2023-03-25 20:43:18 Python

本文将分享5个很棒但不常被提及的Python库,可以帮助你解决各种自然语言处理(NLP)工作。ContractionsContractions可以扩展常见的英文缩写和俚语。它可以快速有效地处理大多数边缘情况,例如缺少撇号。例如:以前需要写一长串正则表达式来展开文本数据(即don't→donot;can't→cannot;haven't→havenot)。合同可以解决这个问题pipinstallcontractsusesampleimportcontractsss="我得走了!我待会见。"text=contracts.fix(s,slang=True)print(text)结果原文:我得走了!待会见。输出:我得走了!待会儿见。文本预处理的一个重要部分是创建一致性并在不丢失太多含义的情况下减少单词列表。词袋模型和TF-IDF创建大型稀疏矩阵,其中每个变量都是语料库中不同的词汇。减少缩略语可以进一步降低维度,也可以帮助过滤停用词。Distilbert-Punctuator分割缺少标点符号的文本并添加标点符号……听起来很简单,对吧?计算机要做到这一点肯定要复杂得多。Distilbert-punctuator是我能找到的唯一可以做到这一点的Python库。而且超级准!这是因为它使用了BERT的精简变体。在结合了20,000多篇新闻文章和4,000个TED演讲稿后,该模型进一步微调以检测句子边界。在插入句末标点符号(例如句号)时,该模型还会适当地将下一个首字母大写。安装pipinstalldistilbert-punctuator这个库需要的依赖比较多,如果你只是想测试一下,可以在GoogleColab上试试。使用样例fromdbpunctuator.inferenceimportInference,InferenceArgumentsfromdbpunctuator.utilsimportDEFAULT_ENGLISH_TAG_PUNCTUATOR_MAPargs=InferenceArguments(model_name_or_path="Qishuai/distilbert_punctuator_en",tokenizer_name="Qishuai/distilbert_punctuator_en",tag2punctuator=DEFAULT_ENGLISH_TAG_PUNCTUATOR_MAP)punctuator_model=Inference(inference_args=args,verbose=False)text=["""howeverwhenIamelectedIvowtoprotectourAmericanworkforceunlikemyopponentIhavefaithinourperseveranceoursenseoftrustandourdemocraticprincipleswillyousupportme"""]print(punctuator_model.punctuation(text)[0])结果ORIGINAL:howeverwhenIamelectedIvowtoprotectourAmericanworkforceunlikemyopponentIhavefaithinourperseveranceoursenseoftrustandourdemocraticprincipleswillyousupportmeOUTPUT:However,whenIamelected,Ivow保护我们的美国劳动力。不像我的对手,我相信我们的坚持、我们的信任感和我们的民主原则。你会支持我吗?如果你只是想让你的文本数据在语法上更正确并且更容易呈现,无论任务是修复凌乱的Twitter帖子还是聊天机器人消息,这个库都适合你。TextstatTextstat是一个易于使用的轻量级库,它提供有关文本数据的各种指标,例如阅读水平、阅读时间和字数。pipinstalltextstatimporttextstattext="""喜欢这条裙子!它太漂亮了。我碰巧在商店里找到了它,我很高兴我找到了,因为我永远不会在网上订购它,因为它很小。"""#Flesch阅读轻松scoreprint(textstat.flesch_reading_ease(text))#90-100|非常简单#80-89|简单#70-79|相当简单#60-69|标准#50-59|相当困难#30-49|困难#<30|非常令人困惑#阅读时间(以秒为单位输出)#假设70毫秒/字符打印(textstat.reading_time(text,ms_per_char=70))#字数统计打印(textstat.lexicon_count(text,removepunct=True))结果原始:喜欢这条裙子!它太漂亮了。我碰巧在一家商店找到了它,我很高兴我找到了,因为我永远不会在网上订购它,因为它很小。输出:74.87#阅读分数被认为是“相当容易”7.98#7.98秒阅读30#30个单词这库还为这些指标添加了额外的分析层。例如,八卦杂志中名人新闻文章的数据集。使用textstat,你会发现更快更易读的文章更受欢迎,留存率更高。Gibberish-Detector是一个低代码库,其主要目的是检测难以理解的单词(或乱码)。它的模型在大量英语单词上进行了训练。pipinstallgibberish-detector安装完成后,需要自己训练模型,不过这个很简单,一分钟就可以了。训练步骤如下:从这里下载名为big.txt的训练语料库打开CLI并cd到big.txt所在的目录运行以下命令:gibberish-detectortrain.\big.txt>gibberish-detector。模型这将在当前目录中创建一个名为gibberish-detector.model的文件。来自gibberish_detectorimportdetector#loadthegibberishdetection的示例用法is_gibberish(text2))结果True#xdnfklskasqd(这是乱码)False#apples(这不是)它帮助我从数据集中删除不良观察结果。您还可以为用户输入实施错误处理。例如,如果用户在您的Web应用程序中输入无意义的乱码文本,您可能会返回一条错误消息。将NLPAug的精华留在最后。首先,什么是数据增强?它是通过添加对现有数据稍作修改的副本来扩展训练集大小的任何技术。当现有数据的多样性有限或不平衡时,通常会使用数据增强。对于计算机视觉问题,增强用于通过裁剪、旋转和更改图像的亮度来创建新样本。对于数字数据,聚类技术可用于创建合成实例。但是如果我们正在处理文本数据呢?这就是NLPAug的用武之地。该库可以通过替换或插入语义相关的词来扩充文本。通过使用像BERT这样的预训练语言模型来增强数据是一种强大的方法,因为它考虑了单词的上下文。根据设置的参数,可以用前n个相似词修改文本。预训练词嵌入,例如Word2Vec和GloVe,也可用于用同义词替换单词。pipinstallnlpaugusesampleimportnlpaug.augmenter.wordasnaw#adjustACTION='substitute'#或使用'insert'TOP_K=15#随机抽取前15个建议词AUG_P=0.40#增加textaug_bert=中40%的词naw.ContextualWordEmbsAug(model_path='bert-base-uncased',action=ACTION,top_k=TOP_K,aug_p=AUG_P)text="""今天跟我进城买菜吧!"""augmented_text=aug_bert.augment(文本,n=3)#n:num.outputsprint(augmented_text)Result原文:今天和我一起进城买食物!输出:?今天和我一起开车去丹佛买杂货!?今天和爸爸一起去镇上买咖啡!?今天和妈妈一起去商店买午餐!假设您正在一个有15k条正面评论和只有4k条负面评论的数据集上训练一个监督分类模型。严重不平衡的数据集会在训练过程中产生偏向多数类(正面评级)的模型。简单地从少数类(负面评论)中复制示例不会向模型添加任何新信息。相反,利用NLPAug的高级文本增强功能来增加少数类的多样性。该技术已被证明可以提高AUC和F1-Score。结论作为数据科学家、Kaggle参与者或一般的程序员,我们需要找到更多工具来简化我们的工作流程,这一点很重要。这使我们能够利用这些库来解决问题、扩充我们的数据集,并花更多时间思考解决方案而不是编写代码。迈克尔·马金