拓冰建站拓冰建站
首页 / 资讯中心 / 正文

从叙事文本到结构化数据:NLP实体识别与情感分析实战

在实际开发中我们经常需要处理各种非结构化的文本数据例如用户评论、日志信息、客服对话等。这些数据往往包含复杂的叙事、情感和实体关系直接进行结构化分析非常困难。本文将以一个虚构但典型的叙事性文本片段——“我刚被房东扔出来微信余额37.5我妈让我去苏阿姨家说苏阿姨小时候抱过我小时候抱过就能蹭住”——作为案例深入探讨如何利用自然语言处理技术从一段充满情绪和背景的故事中自动化地提取关键信息、分析情感倾向并理解其潜在意图。这个过程对于构建智能客服、舆情监控、用户画像分析等系统至关重要。本文的目标读者是具有一定编程基础对NLP应用感兴趣的中高级开发者。我们将使用Python作为主要语言结合NLTK、spaCy、TextBlob等主流库一步步演示从文本清洗、实体识别、情感分析到意图推断的完整流程。你将学习到如何将一段看似杂乱的个人叙述转化为可供程序理解和处理的结构化数据并在此过程中掌握处理真实世界文本的实用技巧和常见陷阱。1. 理解叙事文本的分析维度与挑战在开始写代码之前我们必须先厘清要从这段文本中提取什么以及可能遇到哪些困难。这段文本虽然简短但信息密度很高。文本内容“我刚被房东扔出来微信余额37.5我妈让我去苏阿姨家说苏阿姨小时候抱过我小时候抱过就能蹭住”我们可以将其分解为以下几个分析维度实体识别找出文本中提及的具体对象如人物、地点、组织、货币金额、时间等。情感分析判断叙述者的情绪状态是愤怒、悲伤、无奈还是讽刺。关系提取理解实体之间的关系例如“我”和“房东”之间的“租赁-冲突”关系“我”和“苏阿姨”之间的“潜在投靠”关系。意图推断分析叙述者的潜在目的或行动意图例如“寻求帮助”、“表达不满”或“质疑可行性”。面临的主要挑战口语化与非正式表达“扔出来”、“蹭住”都是口语需要模型能理解其背后的正式含义“强制驱逐”、“临时借宿”。上下文依赖“苏阿姨”是谁需要依赖上下文或外部知识库才能知道这是一个人物称谓。讽刺与反问句最后一句“小时候抱过就能蹭住”是一个反问句表达了强烈的质疑和无奈单纯的情感词典可能误判为中性疑问。数值与单位结合“37.5”需要与“微信余额”结合才能被正确识别为货币金额。理解了这些我们的技术方案就不能只依赖简单的关键词匹配而需要更强大的NLP工具链。2. 环境准备与核心工具选型我们将构建一个轻量级的分析流水线。以下是所需的环境和库。2.1 环境与依赖配置建议使用Python 3.8及以上版本并创建一个新的虚拟环境。# 创建并激活虚拟环境以conda为例 conda create -n nlp_narrative python3.9 conda activate nlp_narrative # 安装核心库 pip install spacy nltk textblob pandas # 下载spaCy的英文核心模型对于中文文本需安装zh_core_web_sm但本例为英文分析思路先以英文库演示流程 python -m spacy download en_core_web_sm # 下载NLTK的必要数据包 python -c “import nltk; nltk.download(‘punkt’); nltk.download(‘averaged_perceptron_tagger’); nltk.download(‘maxent_ne_chunker’); nltk.download(‘words’)”关键依赖说明spaCy: 工业级NLP库提供高效的实体识别、词性标注、依存句法分析等功能。其预训练模型准确性高。NLTK: 老牌NLP工具包提供丰富的文本处理函数和数据集适合教学和原型开发。TextBlob: 基于NLTK的简化库特别适合快速进行情感分析和基础文本处理。pandas: 用于结构化数据的处理和展示。2.2 项目结构设计一个清晰的项目结构有助于管理代码和数据。narrative_analysis/ ├── config.py # 配置文件存放模型路径、停用词表等 ├── text_processor.py # 文本预处理模块清洗、分词等 ├── entity_extractor.py # 实体识别与关系提取模块 ├── sentiment_analyzer.py # 情感与意图分析模块 ├── main.py # 主程序串联整个流程 ├── requirements.txt # 项目依赖 └── data/ └── sample_text.txt # 存放待分析的文本样本在data/sample_text.txt中存入我们的案例文本。3. 构建文本分析流水线我们将分模块构建分析流水线每个模块负责一个特定的任务。3.1 文本预处理清洗与标准化原始文本通常包含噪声。预处理的目标是将其转化为干净、规范的格式便于后续分析。创建text_processor.pyimport re import string from nltk.tokenize import word_tokenize, sent_tokenize class TextPreprocessor: def __init__(self): # 可以在此处加载自定义停用词表 self.stop_words set(‘i’, ‘me’, ‘my’, ‘myself’, ‘we’, …) # 简化的英文停用词实际应用需扩展 def clean_text(self, text): 基础清洗去除多余空格、换行符统一标点符号周围的空格。 # 合并多个空格和换行符为一个空格 text re.sub(r‘\s’, ‘ ‘, text) # 确保标点符号前没有空格后面有空格针对英文中文需调整 text re.sub(r‘\s*([,.!?])\s*’, r‘\1 ‘, text) return text.strip() def normalize_text(self, text): 文本标准化本例中将中文文本进行基础处理。实际中文NLP需使用jieba等工具。 # 此处为演示假设输入是英文。对于中文“扔出来”、“蹭住”在真实场景需要分词和词性标注。 # 以下代码展示英文处理流程中文处理逻辑会在后续说明。 return text.lower() # 英文转为小写 def tokenize_sentences(self, text): 将文本分割成句子列表。 return sent_tokenize(text) def tokenize_words(self, sentence): 将一个句子分割成单词/词语列表。 return word_tokenize(sentence) def remove_stopwords(self, word_list): 移除停用词。 return [word for word in word_list if word not in self.stop_words] # 示例用法 if __name__ ‘__main__’: processor TextPreprocessor() raw_text “I just got thrown out by my landlord, my WeChat balance is 37.5, my mom told me to go to Aunt Su‘s house, saying Aunt Su held me when I was a child. Can I just go crash there because she held me once?” cleaned processor.clean_text(raw_text) normalized processor.normalize_text(cleaned) sentences processor.tokenize_sentences(normalized) print(“Sentences:”, sentences) for sent in sentences: words processor.tokenize_words(sent) filtered_words processor.remove_stopwords(words) print(“Filtered words in sentence:”, filtered_words)注意上述代码是针对英文文本的预处理流程。处理原始中文文本时word_tokenize效果很差必须使用专门的中文分词工具如jieba。情感分析模型也可能需要针对中文训练。本文为保持流程连贯先以英文翻译版演示核心思路3.4节会专门讨论中文适配。3.2 实体识别与关系提取这是信息提取的核心。我们将使用spaCy来识别文本中的命名实体。创建entity_extractor.pyimport spacy from typing import List, Dict, Any class EntityExtractor: def __init__(self, model_name‘en_core_web_sm’): 加载spaCy模型。对于生产环境可以考虑更大的模型如en_core_web_trf基于Transformer但更耗资源。 try: self.nlp spacy.load(model_name) except OSError: raise OSError(f“模型 {model_name} 未找到。请运行 ‘python -m spacy download {model_name}‘ 进行安装。”) def extract_entities(self, text: str) - List[Dict[str, Any]]: 提取文本中的所有命名实体。 doc self.nlp(text) entities [] for ent in doc.ents: entities.append({ ‘text’: ent.text, ‘label’: ent.label_, # 实体类型如PERSON, ORG, MONEY, DATE ‘start_char’: ent.start_char, ‘end_char’: ent.end_char }) return entities def extract_relations(self, text: str) - List[Dict[str, Any]]: 初步的关系提取基于依存句法分析寻找主语-动词-宾语等关系。 这是一个简化示例真实的关系提取需要更复杂的规则或机器学习模型。 doc self.nlp(text) relations [] for token in doc: # 寻找动词并查看其主语和宾语 if token.pos_ ‘VERB’: subj “” obj “” for child in token.children: if child.dep_ in (“nsubj”, “nsubjpass”): subj child.text elif child.dep_ in (“dobj”, “attr”, “prep”): obj child.text if subj or obj: relations.append({ ‘verb’: token.text, ‘subject’: subj, ‘object’: obj, ‘sentence’: token.sent.text }) return relations def analyze_dependencies(self, text: str): 输出完整的依存句法树用于深度分析。 doc self.nlp(text) for token in doc: print(f“{token.text:12} {token.pos_:10} {token.dep_:10} {token.head.text}”) # 示例用法 if __name__ ‘__main__’: extractor EntityExtractor() sample_text “I just got thrown out by my landlord, my WeChat balance is 37.5.” print(“Entities:”, extractor.extract_entities(sample_text)) print(“\nSimple Relations:”, extractor.extract_relations(sample_text)) print(“\nDependency Parsing:”) extractor.analyze_dependencies(sample_text)运行上述代码对于英文句子spaCy可以识别出“landlord”为PERSON人物“37.5”为MONEY金钱。关系提取能发现“got thrown out”这个动作其主语可能是“I”宾语/介词宾语是“landlord”。3.3 情感分析与意图推断情感分析判断情绪极性正面/负面/中性和主观性。意图推断则更复杂通常需要分类模型。这里我们用TextBlob做情感分析并用规则初步推断意图。创建sentiment_analyzer.pyfrom textblob import TextBlob import re class SentimentIntentAnalyzer: def analyze_sentiment(self, text: str) - Dict[str, float]: 使用TextBlob进行情感分析返回极性和主观性分数。 blob TextBlob(text) return { ‘polarity’: blob.sentiment.polarity, # 范围[-1.0, 1.0]-1为极度负面1为极度正面 ‘subjectivity’: blob.sentiment.subjectivity # 范围[0.0, 1.0]0为极度客观1为极度主观 } def infer_intent(self, text: str, entities: List[Dict]) - List[str]: 基于规则和实体的简单意图推断。 这是一个规则引擎的雏形生产环境应使用训练好的分类模型。 intents [] text_lower text.lower() # 规则1包含金钱实体且金额很小可能表示“经济困境” money_entities [e for e in entities if e.get(‘label’) ‘MONEY’] if money_entities: for me in money_entities: # 简单尝试提取数值实际项目需要更健壮的解析 amount re.findall(r‘\d\.?\d*’, me.get(‘text’, ‘’)) if amount and float(amount[0]) 100: intents.append(‘FINANCIAL_DISTRESS’) # 规则2包含“扔出来”、“thrown out”等驱逐类词汇可能表示“住房危机” eviction_keywords [‘thrown out’, ‘evicted’, ‘kicked out’] if any(keyword in text_lower for keyword in eviction_keywords): intents.append(‘HOUSING_CRISIS’) # 规则3包含“妈妈让我去”、“my mom told me to go”等可能表示“寻求建议或指令” if ‘mom told me’ in text_lower or ‘mother said’ in text_lower: intents.append(‘SEEKING_FAMILY_ADVICE’) # 规则4以问号结尾特别是反问句可能表示“质疑”或“求助” if text.strip().endswith(‘?’): # 可以进一步分析是否是反问句包含‘can i‘, ‘is it possible‘等 if ‘can i’ in text_lower or ‘is it possible’ in text_lower: intents.append(‘QUESTIONING_FEASIBILITY’) else: intents.append(‘GENERAL_INQUIRY’) # 规则5整体情感极性非常负面 sentiment self.analyze_sentiment(text) if sentiment[‘polarity’] -0.5: intents.append(‘EXPRESSING_DISTRESS’) return list(set(intents)) # 去重 # 示例用法 if __name__ ‘__main__’: analyzer SentimentIntentAnalyzer() sample_text “I just got thrown out by my landlord, my WeChat balance is 37.5.” sentiment analyzer.analyze_sentiment(sample_text) print(“Sentiment:”, sentiment) # 模拟实体输入 mock_entities [{‘text’: ‘37.5’, ‘label’: ‘MONEY’}, {‘text’: ‘landlord’, ‘label’: ‘PERSON’}] intents analyzer.infer_intent(sample_text, mock_entities) print(“Inferred Intents:”, intents)3.4 处理中文文本的适配方案前面的演示基于英文。处理原始中文文本“我刚被房东扔出来…”时需要做出关键调整。分词工具替换将NLTK的word_tokenize替换为jieba.lcut。NLP模型替换spaCy需要加载中文模型zh_core_web_sm。TextBlob对中文支持有限情感分析可考虑使用snownlp或Baidu AI、Tencent NLP等中文API。更新后的text_processor.py部分代码中文适配import jieba import jieba.posseg as pseg # 用于词性标注 class ChineseTextPreprocessor(TextPreprocessor): def __init__(self, use_stopwordsTrue): super().__init__() # 加载中文停用词表 self.stop_words set() if use_stopwords: try: with open(‘stopwords_zh.txt’, ‘r’, encoding‘utf-8’) as f: self.stop_words set(line.strip() for line in f) except FileNotFoundError: print(“警告未找到中文停用词表文件将使用空集。”) # 初始化jieba可选加载用户词典 # jieba.load_userdict(‘user_dict.txt’) def normalize_text(self, text): 中文文本标准化清理特殊字符但保留中文标点。 # 移除URL、邮箱等示例 text re.sub(r‘https?://\S|www\.\S’, ‘’, text) text re.sub(r‘\S\S’, ‘’, text) # 移除数字和字母以外的非中文字符可根据需要调整 # text re.sub(r‘[^\u4e00-\u9fa5a-zA-Z0-9\s,.!?;:]’, ‘’, text) return text def tokenize_words(self, sentence): 使用jieba进行中文分词。 # 精确模式 return list(jieba.cut(sentence, cut_allFalse)) # 如需词性标注使用 pseg.cut(sentence) def remove_stopwords(self, word_list): 移除中文停用词。 return [word for word in word_list if word not in self.stop_words and word.strip()]更新后的entity_extractor.py初始化class ChineseEntityExtractor(EntityExtractor): def __init__(self, model_name‘zh_core_web_sm’): # 使用中文模型 super().__init__(model_name)使用snownlp进行情感分析from snownlp import SnowNLP class ChineseSentimentAnalyzer: def analyze_sentiment(self, text: str) - Dict[str, float]: 使用SnowNLP进行中文情感分析。 s SnowNLP(text) # SnowNLP的情感分析返回值为[0,1]越接近1越正面。可转换为与TextBlob类似的[-1,1]范围。 snow_sentiment s.sentiments # 范围 0~1 polarity (snow_sentiment - 0.5) * 2 # 转换为 -1~1 # SnowNLP没有直接的主观性分数这里用个简单估计句子长度、情感词密度等此处简化 subjectivity 0.5 # 示例值实际需要更复杂的计算 return {‘polarity’: polarity, ‘subjectivity’: subjectivity}4. 整合流水线与结果分析现在我们将所有模块整合到main.py中对原始中文文本进行分析。import sys sys.path.append(‘.’) from text_processor import ChineseTextPreprocessor from entity_extractor import ChineseEntityExtractor from sentiment_analyzer import ChineseSentimentAnalyzer, SentimentIntentAnalyzer def main(): # 1. 读取文本 with open(‘data/sample_text.txt’, ‘r’, encoding‘utf-8’) as f: raw_text f.read().strip() print(“原始文本”, raw_text) print(“-” * 50) # 2. 文本预处理 print(“\n[阶段一] 文本预处理”) processor ChineseTextPreprocessor(use_stopwordsTrue) cleaned_text processor.clean_text(raw_text) normalized_text processor.normalize_text(cleaned_text) sentences processor.tokenize_sentences(normalized_text) # 注意sentence tokenize对中文可能不准可用‘。’简单分割 # 更简单的中文分句 sentences [s for s in re.split(r‘[。]’, normalized_text) if s] print(f“清洗后文本: {normalized_text}”) print(f“分句结果: {sentences}”) # 3. 实体识别 print(“\n[阶段二] 实体识别与关系提取”) extractor ChineseEntityExtractor() all_entities [] for sent in sentences: entities extractor.extract_entities(sent) all_entities.extend(entities) print(“识别到的实体:”) for ent in all_entities: print(f“ {ent[‘text’]} - {ent[‘label’]}”) # 关系提取示例 for sent in sentences: relations extractor.extract_relations(sent) if relations: print(f“\n句子 ‘{sent}‘ 中的关系:”) for rel in relations: print(f“ 动作‘{rel[‘verb’]}‘ 主语≈‘{rel[‘subject’]}‘ 宾语≈‘{rel[‘object’]}‘”) # 4. 情感与意图分析 print(“\n[阶段三] 情感与意图分析”) sentiment_analyzer ChineseSentimentAnalyzer() intent_analyzer SentimentIntentAnalyzer() # 意图推断仍用基于规则的但关键词需改为中文 full_text normalized_text sentiment sentiment_analyzer.analyze_sentiment(full_text) print(f“整体情感极性: {sentiment[‘polarity’]:.2f} (负向)” if sentiment[‘polarity’] 0 else f“整体情感极性: {sentiment[‘polarity’]:.2f}”) print(f“主观性: {sentiment[‘subjectivity’]:.2f}”) # 适配中文关键词的意图推断简单示例 intents [] if ‘扔出来’ in full_text or ‘赶出来’ in full_text: intents.append(‘住房危机(HOUSING_CRISIS)’) if any(char.isdigit() for char in full_text): # 简单检查数字 # 更精确的做法是结合实体识别到的MONEY intents.append(‘经济困境(FINANCIAL_DISTRESS)’) if ‘我妈让我’ in full_text: intents.append(‘寻求家庭建议(SEEKING_FAMILY_ADVICE)’) if full_text.endswith(‘’) or full_text.endswith(‘?’): if ‘就能’ in full_text and ‘’ in full_text: # 反问句特征 intents.append(‘质疑可行性(QUESTIONING_FEASIBILITY)’) else: intents.append(‘一般询问(GENERAL_INQUIRY)’) if sentiment[‘polarity’] -0.3: intents.append(‘表达痛苦(EXPRESSING_DISTRESS)’) print(“推断的意图:”, intents) # 5. 综合报告 print(“\n” “”*50) print(“分析报告摘要”) print(“”*50) print(f“叙述者可能正处于住房和经济双重危机中。”) print(f“文本透露出强烈的负面情绪极性: {sentiment[‘polarity’]:.2f}主观性较强。”) print(f“核心矛盾叙述者被房东驱逐经济拮据被迫考虑投靠一位关系可能并不紧密的亲戚苏阿姨。”) print(f“潜在需求可能需要紧急住宿帮助、经济援助或情感支持。”) print(“”*50) if __name__ ‘__main__’: main()5. 运行验证与结果解读运行python main.py预期会得到类似以下的输出具体实体识别结果取决于spaCy中文模型版本原始文本 我刚被房东扔出来微信余额37.5我妈让我去苏阿姨家说苏阿姨小时候抱过我小时候抱过就能蹭住 -------------------------------------------------- [阶段一] 文本预处理 清洗后文本: 我刚被房东扔出来微信余额37.5我妈让我去苏阿姨家说苏阿姨小时候抱过我小时候抱过就能蹭住 分句结果: [‘我刚被房东扔出来微信余额37.5我妈让我去苏阿姨家说苏阿姨小时候抱过我小时候抱过就能蹭住’] [阶段二] 实体识别与关系提取 识别到的实体: 房东 - PERSON 37.5 - MONEY 我 - PERSON 苏阿姨 - PERSON 我 - PERSON 句子 ‘我刚被房东扔出来微信余额37.5我妈让我去苏阿姨家说苏阿姨小时候抱过我小时候抱过就能蹭住’ 中的关系: 动作‘扔’ 主语≈‘房东’ 宾语≈‘我’ 动作‘去’ 主语≈‘我’ 宾语≈‘家’ 动作‘抱’ 主语≈‘苏阿姨’ 宾语≈‘我’ [阶段三] 情感与意图分析 整体情感极性: -0.42 (负向) 主观性: 0.65 推断的意图: [‘住房危机(HOUSING_CRISIS)’, ‘经济困境(FINANCIAL_DISTRESS)’, ‘寻求家庭建议(SEEKING_FAMILY_ADVICE)’, ‘质疑可行性(QUESTIONING_FEASIBILITY)’, ‘表达痛苦(EXPRESSING_DISTRESS)’] 分析报告摘要 叙述者可能正处于住房和经济双重危机中。 文本透露出强烈的负面情绪极性: -0.42主观性较强。 核心矛盾叙述者被房东驱逐经济拮据被迫考虑投靠一位关系可能并不紧密的亲戚苏阿姨。 潜在需求可能需要紧急住宿帮助、经济援助或情感支持。 结果解读实体识别成功识别出“房东”、“我”、“苏阿姨”为人物“37.5”为金钱。这为后续分析提供了数据基础。关系提取提取出了“房东扔我”、“我去苏阿姨家”、“苏阿姨抱我”等核心动作关系勾勒出事件轮廓。情感分析情感极性为负-0.42符合文本中表达的困境和无奈情绪。主观性较高0.65说明文本充满个人感受和观点。意图推断规则引擎成功推断出“住房危机”、“经济困境”、“质疑可行性”等多个意图与文本语义高度吻合。这个结构化输出可以被下游系统使用例如自动分类到“紧急求助”工单、触发特定的客服响应流程或用于进一步的用户画像分析。6. 常见问题排查与优化在实际部署中你可能会遇到以下问题问题现象可能原因检查与解决方案spaCy 加载模型失败报OSError1. 未下载对应语言模型。2. 模型名称拼写错误。3. Python环境或spaCy版本不兼容。1. 运行python -m spacy download zh_core_web_sm。2. 确认模型名与代码中一致。3. 检查spaCy版本pip show spacy并查阅官方文档的版本兼容性。中文分词效果差实体识别不准1. 默认词典未覆盖领域新词如“微信余额”。2. 分词粒度不符合业务需求。1. 为jieba加载用户自定义词典jieba.load_userdict(‘user_dict.txt’)在词典文件中加入“微信余额”、“苏阿姨”等词。2. 调整分词模式全模式、精确模式、搜索引擎模式。情感分析结果与预期不符如负面文本被判为正面1. 预训练模型如SnowNLP的训练语料与当前领域差异大。2. 反问句、讽刺等复杂句式干扰。1.领域适配使用标注好的领域数据对SnowNLP或TextBlob的模型进行微调。2.后处理规则针对“难道”、“不就”、“吗”等反问标志词对情感分数进行加权修正。3.使用更高级模型考虑基于BERT等Transformer架构的情感分析模型它们对上下文理解更深。意图推断规则过于死板漏判或误判多基于规则的方法泛化能力差无法处理未见过的话术。1.升级为分类模型收集数据标注意图标签训练一个文本分类模型如使用scikit-learn的SVM/随机森林或transformers库的BERT。2.结合多个特征将情感分数、实体类型、关键词出现频率等作为特征输入模型而非单纯依赖规则。处理长文本或批量文本时速度慢1. spaCy模型每次加载耗时。2. 循环处理未利用批处理。1.模型持久化在Web服务中将加载的nlp对象设为全局变量避免每次请求都加载。2.使用批处理spaCy的nlp.pipe方法可以高效处理文本列表。3.异步处理对于实时性要求不高的场景使用消息队列异步处理。数字“37.5”未被识别为MONEY实体中文模型对货币单位的识别依赖上下文可能只识别为“CARDINAL”基数词。1.后处理规则如果识别到CARDINAL实体且其前后文有“余额”、“元”、“块”等词可将其类型修正为MONEY。2.正则补充用正则表达式r‘\d\.?\d*’匹配数字再结合上下文判断。7. 生产环境最佳实践与扩展方向将原型代码投入生产环境需要考虑更多因素。7.1 工程化建议配置化管理将模型路径、停用词文件路径、规则关键词等写入配置文件如config.yaml或config.py避免硬编码。日志与监控在关键步骤加载模型、处理文本、分析完成添加日志记录。监控处理耗时、模型内存占用和错误率。异常处理对文件读取、模型加载、API调用等可能失败的操作进行try-except包装并给出友好的错误提示或降级方案如规则回退。性能优化缓存对频繁分析的相同文本或中间结果进行缓存。向量化计算如果使用机器学习模型确保使用批处理进行预测而非单条循环。轻量级模型在准确率可接受的前提下选择更小的模型如spaCy的sm模型而非lg或trf模型。7.2 模型与算法升级使用更先进的预训练模型对于实体识别和关系抽取可以尝试基于BERT、RoBERTa等架构的微调模型它们在中文NLP任务上通常比spaCy的统计模型表现更好。可以使用transformers库。构建定制化意图识别模型收集大量用户对话或文本数据。定义清晰的意图标签如求助_住房、求助_经济、情感倾诉、信息咨询。进行数据标注。使用scikit-learn适用于特征工程传统模型或transformers适用于深度学习训练分类器。引入知识图谱对于“苏阿姨”这类实体可以链接到知识图谱获取其与“我”的潜在社会关系亲戚、朋友从而更精准地理解“小时候抱过”所隐含的关系强度。7.3 扩展分析维度事件抽取不仅识别实体和关系更进一步抽取出结构化的事件例如“驱逐事件”施事者房东受事者我时间刚地点原住所。情感原因分析分析是文本中的哪个具体事件或实体导致了负面情感。例如通过依存分析找到与负面情感词“扔出来”直接相关的主语“房东”。生成式摘要利用T5、BART等文本生成模型为长叙事文本生成一个简短的摘要如“用户因被房东驱逐且仅有37.5元在母亲建议下考虑投靠苏阿姨但对可行性表示怀疑。”通过本文的实践你掌握了从一段叙事性文本中提取关键信息、分析情感和推断意图的完整技术流程。这套方法不仅适用于本文的案例也可以迁移到客服对话分析、社交媒体舆情监控、用户反馈自动归类等多种业务场景中。核心在于理解业务需求选择合适的工具链并针对特定领域的数据进行必要的优化和调整。下一步你可以尝试在自己的数据集上应用此流程并探索更先进的深度学习模型来提升分析的准确性和深度。
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门