原文:
towardsdatascience.com/nlp-text-summarization-and-keyword-extraction-on-property-rental-listings-part-1-f1b760cc7bbb?source=collection_archive---------1-----------------------#2024-07-08
在出租房源数据上实施 NLP 技术的实际应用,例如文本摘要、NER、主题建模和文本分类
https://medium.com/@kristiyanto_?source=post_page---byline--f1b760cc7bbb--------------------------------https://towardsdatascience.com/?source=post_page---byline--f1b760cc7bbb-------------------------------- Daniel Kristiyanto
·发表于Towards Data Science ·阅读时间 10 分钟·2024 年 7 月 8 日
–
介绍
自然语言处理(NLP)可以显著提升出租房源描述的分析和可用性。在本次实践中,我们将探索 NLP 技术的实际应用,例如文本摘要、命名实体识别(NER)和主题建模,以提取洞察并丰富东京 Airbnb 房源数据的描述。使用公开的可用数据和像 spaCy 与 SciKit-Learn 这样的工具,您可以跟随教程,复制结果,或将这些技术应用于自己的文本数据,只需进行最小的调整。代码库可在GitHub上获取,您可以进行分叉并进行实验。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/264198623a04de117747b2f69f02975b.png
本文展示了使用多种 NLP 技术,从房产出租描述数据(左)中提取信息,并将其转化为更具信息量的描述(右)。文中的所有图片均由作者制作。代码和 Jupyter 笔记本可在GitHub上找到,数据可以在insideairbnb.com上获取,并遵循创意共享署名协议。
第一部分(本文)涵盖基础内容:目标、数据及其准备工作,以及用于提取关键词和文本摘要的各种技术,如命名实体识别(NER)、TF-IDF / 句子评分、以及谷歌的 T5(文本到文本的转换器)。我们还将涉及如何利用这些见解来提升用户体验 — 包括服务建议。
第二部分(即将发布)涵盖主题建模和文本预测:第二部分将展示如何在无标签数据上执行主题建模。即将发布的文章将讨论诸如聚类等技术,帮助揭示隐藏的主题,并构建一个预测模型,以根据房源类别和主题对租赁房源进行分类。
目标
任务很简单:
给定的示例输入:租赁描述
生成输出:
关键词:“商业街”、”商店”、或 “靠近车站”
关键词有助于可视化数据、揭示主题、识别相似性,并改善前端的搜索功能。有关如何使用这些关键词的建议,请参见本文底部。
摘要:一到两句话,约 80 个字符。
摘要提供简洁的信息,通过快速传达列表中的最重要方面,提升用户体验。
主题/话题:“优越的交通连接”、”适合家庭入住”
对共享相同主题的房源进行分类可以作为推荐系统,帮助用户找到符合他们偏好的房源。与单个关键词不同,这些主题可以涵盖多个关键词(如厨房、桌子、单人床、长期出租 => “数字游牧者友好”)。我们将在第二部分(即将发布的文章)深入讨论这个问题。
章节:
数据与准备
获取数据、清理数据、定制词形还原
文本摘要
TFIDF/句子评分、深度学习、LLM(T5)、评估
使用 NER 提取关键词
正则表达式、匹配器、深度学习
服务建议
1. 数据与准备
我们的数据集由来自insideairbnb.com的租赁房源描述组成,遵循创意共享署名 4.0 国际许可证。我们专注于物业所有者撰写的文本。数据包含近 15,000 个租赁描述,主要为英文。用日文书写的记录(令人惊讶的是,只有少数几条!)在数据清理过程中已被移除,数据清理还包括去除重复记录和刮取器留下的 HTML 残余。由于大量数据去重,可能是由于网络抓取工具的副产品,或者可能是更复杂的问题(例如,房东发布了多个相同的房源),数据清理使得原始数据量减少了约一半。
1a. spaCy 流水线
一旦数据清洗完成,我们就可以开始构建 spaCy 管道。我们可以从一个空白模板开始,或者使用像 en_core_web_sm 这样的预训练模型来处理英文文档。这个模型包含一个强大的管道,包含:
分词(Tokenization):将文本拆分为单词、标点符号等。
词性标注(Part-of-Speech Tagging):将单词标记为名词、动词等。
依存句法分析(Dependency Parsing):识别单词之间的关系。
句子分割器(Sentencizer):将文档拆分为句子。
词形还原(Lemmatization):将词汇简化为其基本形式(例如,seeing、see、saw、seen)。
属性规则(Attribute Ruler):添加、删除或更改标记的属性。
命名实体识别(NER):识别命名实体的类别(人名、地名等)。
1b. 自定义词形还原
即使是像 en_core_web_sm 这样的经过严格测试的管道,通常也需要进行调整以涵盖特定的用例。例如,租赁行业中常用的缩写(例如,br 代表卧室,apt 代表公寓,st 代表街道)可以通过自定义词形还原引入到管道中。为了评估这一点,我们可以比较在有和没有自定义词形还原的管道中,token.lemma_的数量。如果需要,还可以使用其他更强大的预制管道,如 en_core_web_md(中型)或 en_core_web_lg(大型)。
在生产级项目中,需要更全面的列表,可能还需要更严格的数据清洗。例如,表情符号和类似表情符号的符号经常出现在受文化影响的写作中,如日本用户的写作中。这些符号可能会引入噪音,需要特定的处理,如删除或转换。其他数据预处理,如更强大的句子边界检测器,也可能是必要的,以处理缺少空格的句子,例如*“这是一个句子。这也是。还有这个。还有这个。但是,不,这个 Next.js 是一个有效的术语,而不是两个句子!”*
2. 文本摘要
在东京选择租赁选项可能让人不知所措。每个房源都声称是理想的家。然而,数据显示,房产描述常常不尽如人意——它们可能过于冗长,令人沮丧地简短,或者被不相关的细节弄得杂乱无章;这就是为什么文本摘要技术非常有用的原因。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a24a755fb9b1d8b693867f92b9a33236.png
句子评分,以选择最具信息量的句子作为摘要(右图),来自描述(左图)。
2a. 难度级别:简单 — TF-IDF
一种典型的文本摘要方法是使用 TF-IDF(词频-逆文档频率)技术。TF-IDF 同时考虑一个单词在特定文档(例如租赁列表)中的出现频率以及它在整个数据集或语料库中出现的稀有程度。这项技术对于各种文本分析任务也非常有用,如索引、相似度检测和聚类(我们将在第二部分中探讨)。
根据检测到的关键词的相关性计算句子的排名。
该技术的另一种变体是基于词共现的句子评分。与 TF-IDF 类似,这种方法通过比较文档中的单词出现情况来计算得分。该方法快速且简单,不需要额外的工具或其他文档的意识。即使在前端使用 TypeScript,你也可以随时执行此操作,尽管不推荐这样做。
然而,像这样的抽取式摘要技术有一个缺陷:它们只找到文档中的最佳句子,这意味着所选句子中的拼写错误或其他问题会出现在摘要中。这些拼写错误还会影响评分,使得该模型对错误不够宽容,而没有包括在所选句子(或句子)中的重要信息可能会被遗漏。
2b. 级别:中级 — 深度学习
除了基于频率的方法,我们还可以利用深度学习的力量进行文本摘要。序列到序列(Seq2Seq)模型是一种神经网络架构,旨在将序列从一种形式转换为另一种形式。在文本摘要任务中,这些模型充当复杂的翻译器。
一个 Seq2Seq 模型通常由两部分组成:编码器和解码器。编码器处理整个输入文本,捕捉其含义和结构。然后,这些信息被压缩成一个隐藏的表示。接下来,解码器使用来自编码器的隐藏表示生成新的序列——文本摘要。在训练过程中,解码器学习如何将捕捉原始文本关键信息的编码表示进行转换。与抽取式方法不同,这些模型执行抽象式摘要:用自己的话生成摘要,而不是直接从文本中提取句子。
2c. 级别:高级 — 预训练语言模型
对于抽象式摘要,可以考虑使用 T5(Text-To-Text Transfer Transformer)模型。虽然t5-small提供了一个不错的起点,但你可能会通过更大的模型,如t5-base或t5-large,获得更好的结果。请注意,较大的模型可能需要更多的计算资源,并且运行时间较长。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/5fa0b7994b8c847d53c02bf4cd7aba2e.png
大型语言模型(LLMs)能够以富有创意的方式进行文档总结(不仅仅是复制句子),但要获得最佳效果,可能需要在摘要过程中、摘要前后进行额外的步骤,包括适当的提示工程。
像 T5(Text-To-Text Transfer Transformer)或 BERT(Bidirectional Encoder Representations from Transformers)这样的预训练语言模型,可以显著提升摘要效果,适用于那些拥有资源和设置能力的人。然而,尽管这些模型对于大文本有效,但它们可能对于这个特定的用例来说有些过于复杂。它不仅需要更多的设置来发挥最佳效果,还包括提示工程(预处理)、重新训练或微调,以及后处理(如语法、文本大写,甚至事实检查和合理性检查),以引导模型达到期望的输出。
2.d 评估文本摘要
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/696b776edf6bd88cb54cc7a5d59a6675.png
提取式(左)与抽象式(右)文本摘要。鉴于摘要质量是主观的,哪种摘要更优并不总是明确的。考虑到所需的努力、成本和计算能力,比较变得更加复杂。
从上面的图片可以看到,当比较使用 TFIDF 的“简单”模型与使用 LLM 的复杂模型时,哪种模型更优并不总是显而易见的。评估文本摘要系统的质量是一个复杂的挑战。与有明确单一答案的任务不同,对于给定文本,并没有一个完美的摘要。人类可以优先考虑原始内容的不同方面,这使得设计与人类判断完全一致的自动化评估指标变得更加困难。
像 ROUGE(召回导向总结评估指标)这样的评估指标旨在实现这一点。通过比较生成的摘要与人工编写的摘要之间的 n-gram(词组序列)重叠,ROUGE 系统地评分摘要的质量。该方法依赖于一组人工编写的摘要作为评估的基准,但这些人工摘要通常并不总是可用的。
3. 使用命名实体识别(NER)进行关键词提取
尽管摘要很有帮助,但关键词有不同的用途。关键词捕捉了潜在租客可能关注的最关键方面。为了提取关键词,我们可以使用 NLP 技术,例如命名实体识别(NER)。这个过程不仅仅是识别频繁出现的词汇。通过考虑诸如词语共现和与租赁列表领域相关性等因素,我们可以提取出关键信息。这些信息可以是单个词,例如‘豪华的’(形容词)、‘银座’(地点),或者像‘安静的环境’(名词短语)或‘靠近新宿’(接近性)这样的短语。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e5d3925865319e0c06d69ec78b94d253.png
评估 NER:SpaCy 内置的命名实体识别(NER)表现良好,但某些实体类型可能需要额外的训练数据以达到最佳准确度。(NER 代表命名实体识别,GPE:地理政治实体)
3a. 难度:简单 — 正则表达式
字符串操作中的“find”函数,加上正则表达式,可以完成关键词查找的工作。然而,这种方法需要一个详尽的单词和模式列表,而这在某些情况下并不实际。如果有一个详尽的关键词列表可供查找(例如,金融相关项目中的股票交易所缩写),正则表达式可能是最简单的方式。
3b. 水平:中级 — 匹配器
虽然正则表达式可以用于简单的关键词提取,但由于需要大量的规则列表,覆盖所有情况变得非常困难。幸运的是,大多数自然语言处理(NLP)工具都具备开箱即用的命名实体识别(NER)功能。例如,Natural Language Toolkit(NLTK)有命名实体分块器,而 spaCy 则有匹配器(Matcher)。
匹配器允许你根据语言特征,如词性标签或特定关键词,定义模式。这些模式可以与租赁描述进行匹配,从而识别相关的关键词和短语。这种方法能够捕捉单个词(如东京)和有意义的短语(如美丽的房子),这些更能代表房产的卖点。
noun_phrases_patterns=[[{'POS':'NUM'},{'POS':'NOUN'}],#example: 2 bedrooms[{'POS':'ADJ','OP':'*'},{'POS':'NOUN'}],#example: beautiful house[{'POS':'NOUN','OP':'+'}],#example: house]# Geo-political entitygpe_patterns=[[{'ENT_TYPE':'GPE'}],#example: Tokyo]# Proximityproximity_patterns=[# example: near airport[{'POS':'ADJ'},{'POS':'ADP'},{'POS':'NOUN','ENT_TYPE':'FAC','OP':'?'}],# example: near to Narita[{'POS':'ADJ'},{'POS':'ADP'},{'POS':'PROPN','ENT_TYPE':'FAC','OP':'?'}]]3c. 水平:高级 — 基于深度学习的匹配器
即使使用匹配器,一些术语也可能由于句子中单词的上下文未被规则匹配捕获。例如,匹配器可能会漏掉像“离上野公园一箭之遥”这样的术语,因为它无法通过任何预定义的模式,或者将“新宿歌舞伎町”误认为是一个人名(它是一个区域,或者是地点(LOC))。
在这种情况下,基于深度学习的方法可能更为有效。通过在包含相关关键词的大量租赁列表上进行训练,这些模型能够学习单词之间的语义关系。这使得这种方法更能适应不断变化的语言使用,并能够揭示潜在的洞察。
使用 spaCy 进行基于深度学习的 NER 非常简便。然而,这种方法的主要构建块通常是标注的训练数据,正如本次练习中的情况一样。标签是目标术语和实体名称的配对(例如:“a stone throw away”是名词短语——或者如图所示:新宿歌舞伎町是一个地点(LOC),而非人名),并以特定的方式格式化。与基于规则的方法不同,基于规则的方法是通过内置功能将术语描述为名词、地点等,而在此方法中,需要数据探索或领域专家来发现我们想要识别的目标术语。
本文的第二部分将讨论使用聚类、引导法和其他方法从数据中发现主题或标签的技术,以进行主题建模。
4. 食用建议
提取的关键词对后台和前端应用都非常有价值。我们可以利用它们进行各种后续分析,如主题和话题探索(将在第二部分讨论)。在前端,这些关键词可以帮助用户找到具有相似特征的列表——可以将它们视为 Instagram 或 Twitter 上的标签(但这是自动的!)。你还可以突出显示这些关键词,或者让它们成为可点击的链接。例如,命名实体识别(NER)可以识别出诸如“Iidabashi”或“Asakusa”这样的地点。当用户将鼠标悬停在这些关键词上时,弹出窗口可以显示有关这些地点的相关信息。
摘要提供了列表的简洁概述,非常适合快速掌握关键信息,或用于移动设备显示。
https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7edfd94e96e80f98979310e6250eedf4.png
关键词和文本摘要可以丰富用户体验。在这个例子中,我们使用提取的文本摘要来快速概览列表描述。选择的关键词(例如 LOC)也被用来提供更多列表描述的背景。这一过程可以在后台进行(以提高加载速度),也可以在前端进行(以提高便利性)。
向前迈进
在本文中,我们展示了各种自然语言处理(NLP)技术的实际应用,如文本摘要和命名实体识别(NER)在租赁列表数据集上的应用。这些技术通过提供简洁、信息丰富且易于搜索的租赁列表,能够显著改善用户体验。
在接下来的文章(第二部分)中,我们将使用聚类等方法来发现隐藏的主题和标签。这将使我们能够构建一个强大的模型,充当推荐引擎。我们还将进一步探索像主题建模和文本分类等高级 NLP 技术,以增强租赁列表描述的分析和可用性。
以上です★これからもうよろしくおねがいします☆また今度。
**注意:
- Github 仓库:https://github.com/kristiyanto/nlp_on_airbnb_dataset2) 数据 (创作共用 4.0 国际许可协议):**https://insideairbnb.com/get-the-data/3) 本文中的所有图片由作者制作。