尝试让程序看懂小说,并能按内容检索。

2017-04-24 10:13:05 +08:00
 enenaaa

目标是挖掘小说里的各种角色、剧情关系,在此基础上提供内容搜索,以及小说评点服务。 不过这些还太远了,目前只简单提取了人物关系链。

https://www.boyunso.com/book/61872

这个是选了较好的结果,大部分情况下错漏还有点明显。

5716 次点击
所在节点    分享创造
42 条回复
yongzhong
2017-04-24 10:43:45 +08:00
通过词频来判断是否是人名吗?关系是通过介词?
jyf
2017-04-24 10:48:59 +08:00
不知道这个提取规则是什么 如何人肉去校验?
hydyy
2017-04-24 10:52:46 +08:00
不错不错
enenaaa
2017-04-24 11:18:29 +08:00
@yongzhong
@jyf
人名判断用两种方式:
1 、在分词时通过姓氏分出人名。
2 、在语义分析阶段,通过特定句式判定。例如:张三说道:。。。, 就判断“张三”可能是人名,这种方式能找出非规则的人名,比如择天记里的天海姓氏。
在前面的基础上,再通过词频和特定词筛掉候选人名。

关系提取是一个是通过完整的关系句式判定,例如:张三作为李四的父亲。还有一个是通过上下文做推测, 目前准确率还不高。

校验方式上,我还没做太多工作,主要靠人肉抽检样本。
isvara
2017-04-24 11:58:56 +08:00
用的什么处理的?
lrxiao
2017-04-24 12:08:43 +08:00
有意思
jyf
2017-04-24 12:32:59 +08:00
我主要是指第二种分析 因为句式很多 也未必是 xxx 说道这种 而你也不可能全列出来 所以我很感兴趣怎么自动弄出这种句式 另外有的说到 未必是有关系 大概你现在的人与人的关系就是 A 提到过 B 这样吧?
Jackeriss
2017-04-24 12:59:36 +08:00
怎么解决一个人物有多个名字的问题呢?比如伏地魔又叫神秘人,其实原名是汤姆·里德尔。这种情况,这个人物关系图会把他们当成不同的人吧?
hotStrip
2017-04-24 13:14:36 +08:00
我觉得以后程序批量输出小说的话,马上就可以输出天蚕土豆和唐家三少这类小说。
no13bus
2017-04-24 13:14:50 +08:00
这个用的是啥 js 库呢
enenaaa
2017-04-24 13:27:33 +08:00
@jyf
@isvara

基于上下文的关系推断,我做得不够深入,思路大体是:
1 、在段内推断主语,宾语。例如:宁江提着宝剑,跑了过来,笑道: xxx 。 这 3 个分句的主语是同一个。
2 、通过关系代词筛选段落。例如:宁小梦挽着哥哥的手臂。这个句子存在推断关系的可能。
3 、在 1 和 2 的基础上,检索附近文本中的主语、宾语和特定语义, 判断出是否存在关系。

可以看到,这个方法有准确性的问题。

另外, 分析的前一步, 是分词和语义格式化。
我首先创建词汇表、句法表、语义表,将句子格式化为已知语义的句法结构。 例如:你好 -> 招呼语义。 妹妹打我->主语是妹妹,谓语是打,宾语是我的指向动作语义。

这个方式当然不能识别所有的句子, 对于一般的小说文本,目前识别率在 5%~10%之间。
enenaaa
2017-04-24 13:32:06 +08:00
@Jackeriss 是有这个问题, 我也没想到好的办法。也许关系链准确后, 可以通过人物关系消除。
enenaaa
2017-04-24 13:32:47 +08:00
@no13bus 百度的 echarts
imn1
2017-04-24 15:08:26 +08:00
无论准确率如何,我都觉得这个项目很有意思
无论这个项目多有意思,我还是持怀疑态度看待

其实,
人与人之间的关系是相当复杂的,很多不能用语言文字描述
但是,当人们以语言文字介绍一些关系时,却是用简化的方式介绍,实际分类很少,看看自己的 SNS 分组就知道,不至于有几百个组别吧?
你可以从这个思路着眼,不要只想着“提取”,也可以用“排除”,从粗分类排除,再按细分类排除,加强准确率
需要很多逻辑判断,几乎是一个语义分析的 AI bot 了,语义——逻辑库应该是重点

例如:
男性-->亲戚-->母亲家族-->长辈-->母亲的平辈-->舅舅
男性-->工作-->长辈-->经理-->上司

另外
1.还要用多因素分析,如上面引入其他人(母亲)的关系辅助
2.多重关系,如家族生意,既是亲戚,也是工作关系等等
3.关系是双向的,例如逻辑出现“舅舅”,当然要同时得到“外甥”,不能单向推导

总的来说,相当难,不过这第一个吃螃蟹,我是持支持态度,希望能持久做下去
lcatt
2017-04-24 15:21:08 +08:00
目前检索速度很快,是只读取了一部分文字么?
graetdk
2017-04-24 15:30:53 +08:00
赞啊,我对这个也很感兴趣,可以加我微信: Z3JlYXRkaw== (Base64 编码)
enenaaa
2017-04-24 15:40:41 +08:00
@lcatt 不是文本检索,而是通过关键字检索。 分析时生成人名、归类新词,输出关键字列表。在我机器上, 分析一本 2.5m 的小说大约需要 10 秒, 比较慢。
lcatt
2017-04-24 15:58:28 +08:00
@enenaaa 我试了下,发现: 1.有些重要的角色没检索出, 2.出现了一些莫名的角色和关联,比如“马背上”。。。,以及很多只出现了几章的配角,所以才问是不是只读取了一部分内容而不是基于全本小说的。
enenaaa
2017-04-24 16:06:04 +08:00
@lcatt 嗯, 是只分析了前 250 章的内容。
人名消歧也还存在问题,上一个版本纯粹的归类算法更严重, 这个版本好了不少 。还在改进中。
jyf
2017-04-24 17:48:42 +08:00
@enenaaa 这个关系推断我建议你多找网友训练 最后让他自己学习到这些

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/356901

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX