跳到主要内容 SiameseAOE 中文-base 模型 ABSA 结果转为 Neo4j 知识图谱 | 极客日志
Python AI 算法
SiameseAOE 中文-base 模型 ABSA 结果转为 Neo4j 知识图谱 介绍如何使用 SiameseAOE 中文模型进行属性情感分析(ABSA),并将结构化结果转换为 Neo4j 知识图谱。内容涵盖环境部署、图谱 Schema 设计、核心转换代码实现、电商评论分析案例及高级优化建议。通过构建产品、属性与情感的节点关系,帮助企业和组织更直观地理解用户需求和情感倾向,适用于电商平台反馈分析等场景。
kaikai 发布于 2026/4/5 更新于 2026/4/13 1 浏览SiameseAOE 中文-base 代码实例:ABSA 结构化结果转为 Neo4j 知识图谱节点关系
1. 项目概述与核心价值
SiameseAOE 通用属性观点抽取模型是一个专门处理中文文本属性情感分析(ABSA)任务的强大工具。这个模型基于先进的提示 + 文本构建思路,通过指针网络实现精准的片段抽取,能够从用户评论、产品反馈等文本中自动识别属性词和对应的情感词。
将 ABSA 的结构化结果转换为 Neo4j 知识图谱,可以让我们以更直观的方式理解和分析用户情感倾向。比如电商平台可以通过这种转换,快速发现哪些产品属性受到用户好评或差评,从而指导产品改进和营销策略。
2. 环境准备与快速部署
2.1 基础环境要求
Python 3.8+
Neo4j 数据库(社区版或企业版)
至少 8GB 内存(处理大规模数据时建议 16GB+)
2.2 安装必要依赖
pip install transformers torch
pip install neo4j
pip install pandas numpy
2.3 启动 Neo4j 数据库 如果你使用 Docker,可以快速启动 Neo4j:
docker run \
--name neo4j \
-p 7474:7474 -p 7687:7687 \
-d \
-v $HOME /neo4j/data:/data \
-v $HOME /neo4j/logs:/logs \
-v $HOME /neo4j/import:/var/lib/neo4j/import \
--env NEO4J_AUTH=neo4j/password \
neo4j:latest
3. ABSA 结果到 Neo4j 的转换实现
3.1 理解 ABSA 数据结构 SiameseAOE 模型输出的典型 ABSA 结果结构如下:
{
"属性词" : {
"情感词" : null
}
}
例如,对于输入文本"音质很好,电池续航时间长",可能输出:
{
"音质" : { "很好" : null } ,
"电池续航" : { "长" : null }
}
3.2 设计知识图谱 Schema
节点类型 :
产品 - 被评论的产品
属性 - 产品的具体属性
情感 - 用户对属性的情感表达
关系类型 :
HAS_ATTRIBUTE - 产品拥有某个属性
HAS_SENTIMENT - 属性获得某种情感评价
3.3 核心转换代码实现 from neo4j import GraphDatabase
import json
class ABSAToNeo4jConverter :
def __init__ (self, uri, user, password ):
self .driver = GraphDatabase.driver(uri, auth=(user, password))
def close (self ):
self .driver.close()
def create_absa_graph (self, product_name, absa_results ):
"""将 ABSA 结果转换为 Neo4j 图谱"""
with self .driver.session() as session:
session.execute_write(
self ._create_product_node, product_name
)
for attribute, sentiment_info in absa_results.items():
sentiment = list (sentiment_info.keys())[0 ] if sentiment_info else "中性"
session.execute_write(
self ._create_absa_relationship, product_name, attribute, sentiment
)
@staticmethod
def _create_product_node (tx, product_name ):
"""创建产品节点"""
query = (
"MERGE (p:产品 {名称:$name}) "
"RETURN p"
)
tx.run(query, name=product_name)
@staticmethod
def _create_absa_relationship (tx, product_name, attribute, sentiment ):
"""创建完整的属性 - 情感关系链"""
attr_query = (
"MERGE (a:属性 {名称:$attr_name}) "
"RETURN a"
)
tx.run(attr_query, attr_name=attribute)
sent_query = (
"MERGE (s:情感 {描述:$sentiment}) "
"RETURN s"
)
tx.run(sent_query, sentiment=sentiment)
product_attr_query = (
"MATCH (p:产品 {名称:$product_name}), (a:属性 {名称:$attribute}) "
"MERGE (p)-[:HAS_ATTRIBUTE]->(a)"
)
tx.run(product_attr_query, product_name=product_name, attribute=attribute)
attr_sent_query = (
"MATCH (a:属性 {名称:$attribute}), (s:情感 {描述:$sentiment}) "
"MERGE (a)-[:HAS_SENTIMENT]->(s)"
)
tx.run(attr_sent_query, attribute=attribute, sentiment=sentiment)
if __name__ == "__main__" :
converter = ABSAToNeo4jConverter("bolt://localhost:7687" , "neo4j" , "password" )
absa_results = {
"音质" : {"很好" : None },
"电池续航" : {"长" : None },
"价格" : {"偏高" : None }
}
converter.create_absa_graph("智能手机 X" , absa_results)
converter.close()
4. 实际应用案例
4.1 电商评论分析实战 假设我们有一个电商平台的用户评论数据集,我们可以这样处理:
def process_ecommerce_reviews (converter, product_name, reviews ):
"""处理电商评论并构建知识图谱"""
for review in reviews:
absa_results = siamese_aoe_analyze(review.text)
converter.create_absa_graph(product_name, absa_results)
reviews = [
"音质很棒,但是电池续航一般" ,
"拍照效果很好,系统流畅" ,
"价格有点贵,但做工精致"
]
converter = ABSAToNeo4jConverter("bolt://localhost:7687" , "neo4j" , "password" )
process_ecommerce_reviews(converter, "智能手机 X" , reviews)
converter.close()
4.2 可视化查询示例 // 查询所有被提及的产品属性
MATCH (a:属性)
RETURN a.名称 AS attribute, count(*) AS mention_count
ORDER BY mention_count DESC
// 查询正面评价最多的属性
MATCH (a:属性)-[:HAS_SENTIMENT]->(s:情感)
WHERE s.描述 IN ["很好", "棒", "优秀", "满意"]
RETURN a.名称 AS attribute, count(s) AS positive_count
ORDER BY positive_count DESC
// 查询需要改进的属性(负面评价)
MATCH (a:属性)-[:HAS_SENTIMENT]->(s:情感)
WHERE s.描述 IN ["差", "不好", "一般", "偏高"]
RETURN a.名称 AS attribute, s.描述 AS sentiment, count(*) AS count
ORDER BY count DESC
5. 高级功能与优化建议
5.1 情感强度分析增强 def enhanced_absa_conversion (tx, product_name, absa_results_with_strength ):
"""增强版的情感分析转换,包含情感强度"""
for attribute, sentiment_data in absa_results_with_strength.items():
sentiment = sentiment_data['sentiment' ]
strength = sentiment_data['strength' ]
query = (
"MERGE (s:情感 {描述:$sentiment, 强度:$strength}) "
"RETURN s"
)
tx.run(query, sentiment=sentiment, strength=strength)
5.2 批量处理优化 def batch_create_absa_data (tx, batch_data ):
"""批量创建 ABSA 图谱数据"""
query = (
"UNWIND $data AS item "
"MERGE (p:产品 {名称:item.product}) "
"MERGE (a:属性 {名称:item.attribute}) "
"MERGE (s:情感 {描述:item.sentiment}) "
"MERGE (p)-[:HAS_ATTRIBUTE]->(a) "
"MERGE (a)-[:HAS_SENTIMENT]->(s)"
)
tx.run(query, data=batch_data)
batch_data = [
{"product" : "智能手机 X" , "attribute" : "音质" , "sentiment" : "很好" },
{"product" : "智能手机 X" , "attribute" : "电池" , "sentiment" : "一般" }
]
6. 总结与下一步建议 通过将 SiameseAOE 的 ABSA 结构化结果转换为 Neo4j 知识图谱,我们创建了一个强大的情感分析可视化工具。这种方法不仅让复杂的情感数据变得直观易懂,还为深入的数据分析提供了坚实基础。
从小规模开始 :先用几百条评论测试整个流程,确保所有组件正常工作
优化查询性能 :为常用查询创建索引,例如对属性名称、情感描述等字段建立索引
考虑实时更新 :对于需要实时分析的场景,可以设计增量更新机制
扩展分析维度 :除了基础的情感分析,还可以加入时间维度、用户群体分析等
结合时间序列分析情感趋势变化
整合用户画像数据,分析不同群体的情感倾向
构建情感传播图谱,分析情感如何在用户间传播
这种方法特别适合电商平台、社交媒体监控、客户反馈分析等场景,能够帮助企业和组织更好地理解用户需求和情感倾向。
微信扫一扫,关注极客日志 微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
相关免费在线工具 加密/解密文本 使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online
RSA密钥对生成器 生成新的随机RSA私钥和公钥pem证书。 在线工具,RSA密钥对生成器在线工具,online
Mermaid 预览与可视化编辑 基于 Mermaid.js 实时预览流程图、时序图等图表,支持源码编辑与即时渲染。 在线工具,Mermaid 预览与可视化编辑在线工具,online
curl 转代码 解析常见 curl 参数并生成 fetch、axios、PHP curl 或 Python requests 示例代码。 在线工具,curl 转代码在线工具,online
Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online