从0到1 | 手把手教你如何使用哈工大NLP工具——PyLTP!
作者 | 杨秀璋
来源 | CSDN 博客(CSDN id:Eastmount)
(本文经作者授权,此系列文章整理后微信平台首发于AI科技大本营)
【导语】此文是作者基于 Python 构建知识图谱的系列实践教程,具有一定创新性和实用性。文章前半部分内容先介绍哈工大 pytltp 工具,包括安装过程、中文分词、词性标注和实体识别的一些基本用法;后半部分内容讲解词性标注、实体识别、依存句法分析和语义角色标注及代码实现。
【上篇】
一、哈工大LTP
LTP(Language Technology Platform)中文为语言技术平台,是哈工大社会计算与信息检索研究中心开发的一整套中文语言处理系统。LTP制定了基于XML的语言处理结果表示,并在此基础上提供了一整套自底向上的丰富而且高效的中文语言处理模块(包括词法、句法、语义等6项中文处理核心技术),以及基于动态链接库(Dynamic Link Library,DLL)的应用程序接口,可视化工具,并且能够以网络服务的形式进行使用。
LTP开发文档:
https://ltp.readthedocs.io/zh_CN/latest/index.html
语言云LTP-Cloud:
http://www.ltp-cloud.com/
模型下载地址:
http://ltp.ai/download.html
在线演示案例如下图所示:
相信从事NLP、数据挖掘、知识图谱等领域的博友都知道哈工大LTP、同义词词林这些工具,该系列文章也会介绍相关的知识,希望对您有所帮助。
此外,再补充另一个在线NLP分析系统,感兴趣的朋友们也可以试一下~
http://ictclas.nlpir.org/nlpir/
二.pyltp 终极安装
下面介绍 Windows10 Python 环境下 LTP 的扩展包 pyltp 安装过程。
1.常见错误
大家通常会调用 “pip install pyltp” 安装该扩展包,但会遇到各种错误,下面介绍一种可行的方法。
2.安装pyltp包
首先,安装Python3.6环境,如下图所示“python-3.6.7-amd64.exe”。
接着,下载pyltp扩展包的whl文件至本地,调用CMD环境进行安装,注意需要将所在文件的路径写清楚。
pyltp-0.2.1-cp35-cp35m-win_amd64.whl (对应Python3.5版本)
pyltp-0.2.1-cp36-cp36m-win_amd64.whl (对应Python3.6版本)
pip install C:\Python36\Scripts\pyltp-0.2.1-cp36-cp36m-win_amd64.whl
whl下载地址:
https://download.csdn.net/download/qq_22521211/10460778
安装过程下图所示,此时表示pyltp安装成功。
注意,如果报错“error:Microsoft Visual C++ 9.0 is required”,则安装下面exe文件。
3.下载模型文件
最后需要下载模型文件,其下载地址为:
百度云
https://pan.baidu.com/share/link?shareid=1988562907&uk=2738088569#list/path=%2F
七牛云
http://ltp.ai/download.html
本文下载3.4版本的模型,下载解压如下图所示:
模型对应的说明如下图所示:
在编写代码时,需要导入指定文件夹中的模型,再进行中文分词、词性标注、命名实体识别、依存句法分析、语义角色标注等分析。例如:
#词性标注
pdir='AgriKG\\ltp\\pos.model'
pos = Postagger()
pos.load(pdir)
postags = pos.postag(word) #基于分词得到的list将下词性标注
postags = list(postags)
print(u"词性:", postags)
分词、词性标注、句法分析一系列任务之间存在依赖关系。举例来讲,对于词性标注,必须在分词结果之上进行才有意义。LTP中提供的5种分析之间的依赖关系如下所示:
讲到这里,哈工大pyltp基本安装成功,接下来将介绍它的基本用法。
基础性文章,希望对入门者有所帮助。
三.中文分句和分词
官方文档:
https://pyltp.readthedocs.io/zh_CN/latest/api.html#id13
实现原理:
https://ltp.readthedocs.io/zh_CN/latest/theory.html#customized-cws-reference-label
1.中文分句
# -*- coding: utf-8 -*-
from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import NamedEntityRecognizer
#分句
text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。"
sents = SentenceSplitter.split(text)
print('\n'.join(sents))
中文分句的输出结果如下所示:
贵州财经大学要举办大数据比赛吗?
那让欧几里得去问问看吧!
其实是在贵阳花溪区吧。
2.中文分词
# -*- coding: utf-8 -*-
from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import NamedEntityRecognizer text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。" #中文分词
segmentor = Segmentor() #初始化实例
segmentor.load("AgriKG\\ltp\\cws.model") #加载模型
words = segmentor.segment(text) #分词
print(type(words))
print(' '.join(words))
segmentor.release() #释放模型
输出结果如下所示(人工换行):
<class 'pyltp.VectorOfString'>
贵州 财经 大学 要 举办 大 数据 比赛 吗 ?
那 让 欧 几 里 得 去 问问 看 吧 !
其实 是 在 贵阳 花溪区 吧 。
此时的分词效果并不理想,如 “大数据” 分为了“大”、“数据”,“欧几里得”分为了“欧”、“几”、“里”、“得”,“贵阳花溪区”分为了“贵阳”、“花溪区”等,故需要引入词典进行更为准确的分词。同时,返回值类型是native的VectorOfString类型,可以使用list转换成Python的列表类型。
3.导入词典中文分词
pyltp 分词支持用户使用自定义词典。分词外部词典本身是一个文本文件(plain text),每行指定一个词,编码同样须为 UTF-8,比如“word”文件,如下图所示:
完整代码如下所示:
# -*- coding: utf-8 -*-
from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import NamedEntityRecognizer ldir='AgriKG\\ltp\\cws.model' #分词模型
dicdir='word' #外部字典
text = "贵州财经大学要举办大数据比赛吗?那让欧几里得去问问看吧!其实是在贵阳花溪区吧。" #中文分词
segmentor = Segmentor() #初始化实例
segmentor.load_with_lexicon(ldir, 'word') #加载模型
words = segmentor.segment(text) #分词
print(' '.join(words)) #分词拼接
words = list(words) #转换list
print(u"分词:", words)
segmentor.release() #释放模型
输出结果如下所示,它将“大数据”、“欧几里得”、“贵阳花溪区”进行了词典匹配,再进行相关分词,但是“贵州财经大学”仍然划分为“贵州”、“财经”、“大学”。Why?
贵州 财经 大学 要 举办 大数据 比赛 吗 ?
那 让 欧几里得 去 问问 看 吧 !
其实 是 在 贵阳花溪区 吧 。
分词: ['贵州', '财经', '大学', '要', '举办', '大数据', '比赛', '吗', '?',
'那', '让', '欧几里得', '去', '问问', '看', '吧', '!',
'其实', '是', '在', '贵阳花溪区', '吧', '。']
4.个性化分词
个性化分词是 LTP 的特色功能。个性化分词为了解决测试数据切换到如小说、财经等不同于新闻领域的领域。在切换到新领域时,用户只需要标注少量数据。个性化分词会在原有新闻数据基础之上进行增量训练。从而达到即利用新闻领域的丰富数据,又兼顾目标领域特殊性的目的。
pyltp 支持使用用户训练好的个性化模型。关于个性化模型的训练需使用 LTP,详细介绍和训练方法请参考 个性化分词 。在 pyltp 中使用个性化分词模型的示例如下:
# -*- coding: utf-8 -*-
from pyltp import CustomizedSegmentor
customized_segmentor = CustomizedSegmentor() #初始化实例
customized_segmentor.load('基本模型', '个性模型') #加载模型
words = customized_segmentor.segment('亚硝酸盐是一种化学物质')
print '\t'.join(words)
customized_segmentor.release()
【下篇】
词性标注、实体识别、依存句法分析和语义角色标注及代码实现
一.词性标注
词性标注(Part-Of-Speech tagging, POS tagging)也被称为语法标注(grammatical tagging)或词类消疑(word-category disambiguation),是语料库语言学(corpus linguistics)中将语料库内单词的词性按其含义和上下文内容进行标记的文本数据处理技术。
pyltp词性标注与分词模块相同,将词性标注任务建模为基于词的序列标注问题。对于输入句子的词序列,模型给句子中的每个词标注一个标识词边界的标记。在LTP中,采用的北大标注集。
完整代码:
# -*- coding: utf-8 -*-
from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import NamedEntityRecognizer ldir='AgriKG\\ltp\\cws.model' #分词模型
dicdir='word' #外部字典
text = "贵州财经大学要举办大数据比赛吗?" #中文分词
segmentor = Segmentor() #初始化实例
segmentor.load_with_lexicon(ldir, 'word') #加载模型
words = segmentor.segment(text) #分词
print(text)
print(' '.join(words)) #分词拼接
words = list(words) #转换list
print(u"分词:", words)
segmentor.release() #释放模型 #词性标注
pdir='AgriKG\\ltp\\pos.model'
pos = Postagger() #初始化实例
pos.load(pdir) #加载模型 postags = pos.postag(words) #词性标注
postags = list(postags)
print(u"词性:", postags)
pos.release() #释放模型 data = {"words": words, "tags": postags}
print(data)
输出结果如下图所示,“贵州”词性为“ns”(地理名词 ),“财经”词性为“n”(一般名词),“举办”词性为“v”(动词),“吗”词性为“u”(助词),“?”词性为“wp”(标点)。
贵州财经大学要举办大数据比赛吗?
贵州 财经 大学 要 举办 大数据 比赛 吗 ?
分词: ['贵州', '财经', '大学', '要', '举办', '大数据', '比赛', '吗', '?']
词性: ['ns', 'n', 'n', 'v', 'v', 'n', 'v', 'u', 'wp']
{'words': ['贵州', '财经', '大学', '要', '举办', '大数据', '比赛', '吗', '?'],
'tags': ['ns', 'n', 'n', 'v', 'v', 'n', 'v', 'u', 'wp']}
具体词性为:
Tag Description Example
a adjective:形容词 美丽
b other noun-modifier:其他的修饰名词 大型, 西式
c conjunction:连词 和, 虽然
d adverb:副词 很
e exclamation:感叹词 哎
g morpheme 茨, 甥
h prefix:前缀 阿, 伪
i idiom:成语 百花齐放
j abbreviation:缩写 公检法
k suffix:后缀 界, 率
m number:数字 一, 第一
n general noun:一般名词 苹果
nd direction noun:方向名词 右侧
nh person name:人名 杜甫, 汤姆
ni organization name:公司名 保险公司,中国银行
nl location noun:地点名词 城郊
ns geographical name:地理名词 北京
nt temporal noun:时间名词 近日, 明代
nz other proper noun:其他名词 诺贝尔奖
o onomatopoeia:拟声词 哗啦
p preposition:介词 在, 把,与
q quantity:量词 个
r pronoun:代词 我们
u auxiliary:助词 的, 地
v verb:动词 跑, 学习
wp punctuation:标点 ,。!
ws foreign words:国外词 CPU
x non-lexeme:不构成词 萄, 翱
z descriptive words 描写,叙述的词 瑟瑟,匆匆
二.命名实体识别
命名实体识别(Named Entity Recognition,简称NER),又称作“专名识别”,是指识别文本中具有特定意义的实体,主要包括人名、地名、机构名、专有名词等。命名实体识别是信息提取、问答系统、句法分析、机器翻译、面向Semantic Web的元数据标注等应用领域的重要基础工具,在自然语言处理技术走向实用化的过程中占有重要地位。
在哈工大Pyltp中,NE识别模块的标注结果采用O-S-B-I-E标注形式,其含义如下(参考):
LTP中的NE 模块识别三种NE,分别为人名(Nh)、机构名(Ni)、地名(Ns)。
完整代码:
# -*- coding: utf-8 -*-
from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import NamedEntityRecognizer ldir='AgriKG\\ltp\\cws.model' #分词模型
dicdir='word' #外部字典
text = "贵州财经大学要举办大数据比赛吗?" #中文分词
segmentor = Segmentor() #初始化实例
segmentor.load_with_lexicon(ldir, 'word') #加载模型
words = segmentor.segment(text) #分词
print(text)
print(' '.join(words)) #分词拼接
words = list(words) #转换list
print(u"分词:", words)
segmentor.release() #释放模型 #词性标注
pdir='AgriKG\\ltp\\pos.model'
pos = Postagger() #初始化实例
pos.load(pdir) #加载模型 postags = pos.postag(words) #词性标注
postags = list(postags)
print(u"词性:", postags)
pos.release() #释放模型 data = {"words": words, "tags": postags}
print(data)
print(" ") #命名实体识别
nermodel='AgriKG\\ltp\\ner.model'
reg = NamedEntityRecognizer() #初始化命名实体实例
reg.load(nermodel) #加载模型
netags = reg.recognize(words, postags) #对分词、词性标注得到的数据进行实体标识
netags = list(netags)
print(u"命名实体识别:", netags) #实体识别结果
data={"reg": netags,"words":words,"tags":postags}
print(data)
reg.release()
输出结果如下图所示,识别出的三个命名实体分别是:“贵州”(B-Ni)表示一个NE开始-机构名,“财经”(I-Ni)表示一个NE中间-机构名,“大学”(E-Ni)表示一个NE结束-机构名。
PS:虽然导入指定词典,但“贵州财经大学”分词仍然被分割,后续研究中。
三.依存句法分析
依存句法是由法国语言学家L.Tesniere最先提出。它将句子分析成一棵依存句法树,描述出各个词语之间的依存关系。也即指出了词语之间在句法上的搭配关系,这种搭配关系是和语义相关联的。如下图所示:
哈工大Pyltp的依存句法关系如下图所示。
参考:
https://ltp.readthedocs.io/zh_CN/latest/appendix.html
完整代码:
# -*- coding: utf-8 -*-
from pyltp import SentenceSplitter
from pyltp import Segmentor
from pyltp import Postagger
from pyltp import Parser
from pyltp import NamedEntityRecognizer ldir = 'AgriKG\\ltp\\cws.model' #分词模型
dicdir = 'word' #外部字典
text = "贵州财经大学要举办大数据比赛吗?" #中文分词
segmentor = Segmentor() #初始化实例
segmentor.load_with_lexicon(ldir, 'word') #加载模型
words = segmentor.segment(text) #分词
print(text)
print(' '.join(words)) #分词拼接
words = list(words) #转换list
print(u"分词:", words)
segmentor.release() #释放模型 #词性标注
pdir = 'AgriKG\\ltp\\pos.model'
pos = Postagger() #初始化实例
pos.load(pdir) #加载模型 postags = pos.postag(words) #词性标注
postags = list(postags)
print(u"词性:", postags)
pos.release() #释放模型 data = {"words": words, "tags": postags}
print(data)
print(" ") #命名实体识别
nermodel = 'AgriKG\\ltp\\ner.model'
reg = NamedEntityRecognizer() #初始化命名实体实例
reg.load(nermodel) #加载模型
netags = reg.recognize(words, postags) #对分词、词性标注得到的数据进行实体标识
netags = list(netags)
print(u"命名实体识别:", netags) #实体识别结果
data={"reg": netags,"words":words,"tags":postags}
print(data)
reg.release() #释放模型
print(" ") #依存句法分析
parmodel = 'AgriKG\\ltp\\parser.model'
parser = Parser() #初始化命名实体实例
parser.load(parmodel) #加载模型
arcs = parser.parse(words, postags) #句法分析 #输出结果
print(words)
print("\t".join("%d:%s" % (arc.head, arc.relation) for arc in arcs)) rely_id = [arc.head for arc in arcs] # 提取依存父节点id
relation = [arc.relation for arc in arcs] # 提取依存关系
heads = ['Root' if id == 0 else words[id-1] for id in rely_id] # 匹配依存父节点词语
for i in range(len(words)): print(relation[i] + '(' + words[i] + ', ' + heads[i] + ')') parser.release()
输出结果如下所示,其中ATT表示定中关系,如“贵州-大学”、“财经-大学”;SBV表示主谓关系,如“大学-举办”;ADV表示状中结果“要-举办”;HED表示核心关系“举办-Root”,即“举办大数据”。
补充:arc.head表示依存弧的父节点词的索引,arc.relation表示依存弧的关系。arc.head中的ROOT节点的索引是0,第一个词开始的索引依次为1、2、3。
四.语义角色标注
该部分代码仅供博友们参考,作者还在深入研究中。
#语义角色标注
from pyltp import SementicRoleLabeller srlmodel = 'AgriKG\\ltp\\pisrl.model'
labeller = SementicRoleLabeller() #初始化实例
labeller.load(srlmodel) #加载模型 words = ['元芳', '你', '怎么', '看']
postags = ['nh', 'r', 'r', 'v']
arcs = parser.parse(words, postags) #依存句法分析 #arcs使用依存句法分析的结果
roles = labeller.label(words, postags, arcs) #语义角色标注 # 打印结果
for role in roles: print(role.index, "".join( ["%s:(%d,%d)" % (arg.name, arg.range.start, arg.range.end) for arg in role.arguments])) labeller.release() #释放模型
输出结果如下:
3 A0:(1,1)ADV:(2,2)
上面的例子,由于结果输出一行,所以“元芳你怎么看”有一组语义角色。其谓词索引为3,即“看”。这个谓词有三个语义角色,范围分别是(0,0)即“元芳”,(1,1)即“你”,(2,2)即“怎么”,类型分别是A0、A0、ADV。
希望这篇基础性文章对你有所帮助,如果有错误或不足之处,还请海涵。
原文链接:
https://blog.csdn.net/Eastmount/article/details/90771843
https://blog.csdn.net/Eastmount/article/details/92440722
最近,大家都在谈论高考志愿报考话题,Python大本营也发起投票,欢迎大家与我们交流~
(*本文经作者授权微信平台首发于AI科技大本营,转载请微信联系1092722531)
◆
精彩推荐
◆
比写代码更重要的是抓住下一个技术风口,6月技术福利,BTA大牛带你一起探索未来的技术方向。机器学习、数据分析、自然语言处理、知识图谱等热门领域的大牛们都在关注什么?企业落地实践经验有哪些?扫码参与活动,限时免费获取。
推荐阅读:
30秒让图片变裸照,使用无门槛,这个软件比Deepfake杀伤力更大
吴恩达Drive.ai因经营困难“卖身”苹果
上海交大张拳石:神经网络的可解释性,从经验主义到数学建模
我发现一个新的软件,用自然语言编程!非常酷!
香港的房价真的那么贵吗?用数据挖掘真相!
我花了 10 年,从工厂妹逆袭为纽约高薪程序员
面试官问你MyBatis中有哪些设计模式,把这篇文章发给他
中本聪的一失之虑让比特币趋于中心化, 那这些问题的严重性, 你了解吗?
想换行做 5G 的开发者到底该咋办?
如何向妹子解释:为啥 5G 来了需要换 SIM卡!

相关文章:

PL/SQL Developer远程访问Oracle数据库
安装oracle对应的版本 ,在oracle的安装目录找到oracle\product\11.2.0\dbhome_1\NETWORK\ADMIN\tnsnames.ora这个文件添加上数据库访问的串 LWZC (DESCRIPTION (ADDRESS (PROTOCOL TCP)(HOST [服务器地址])(PORT 1521))(CONNECT_DATA (SERVER DEDICATED)(SE…

基于shiro的权限设计
shiro介绍 Apache shiro是一个权限控制框架,它将安全认证抽取出来,实现用户身份认证,权限授权,加密,会话管理等功能,是一个通用的安全认证框架,而且还可以用于分布式集群。功能如下 1.验证用户 …

C++ 中隐藏DOS调用的命令行窗口
转自:http://hi.baidu.com/jackyho2000/blog/item/b5c5fabdd3b4db0019d81fbb.html 我演示了一下在MFC程序中怎么应用DOS的dir的命令,可是我们遇到了需要解决的问题,首先就是文件dir.txt的残留问题,其实这个问题很简单,…

Citrix Avalon安装实验手册之一----Avalon概述及实验环境准备
“Avalon”(阿瓦隆)是思杰下一代桌面/应用交付产品的项目名称,其核心目标是把现有Windows应用和桌面转换成云服务。 其中你最熟悉的XenApp和XenDesktop就是Avalon项目的核心所在。Avalon这个全新解决方案将XenApp、XenDesktop、CloudGateway、…

图片像素、英寸、厘米之间的单位换算
转自:http://hi.baidu.com/cjg501/blog/item/f040fc0898d5379f0b7b8244.html 今天朋友用photoshop处理图片时要把图片保存指定的大小,但她只对厘米要形像感,可是在软件里保存的图片没有这个单位,只能保存的单位为像素;…

创客集结号_你知道单机片和Arduino之间的区别吗
Arduino 是一款便捷灵活、方便上手的开源电子原型平台,包含硬件和软件都是开源的。 开源硬件指与自由及开放原始码软件相同方式设计的计算机和电子硬件。开源硬件开始考虑对软件以外的领域开源,是开源文化的一部分。这个词主要是用来反映自由释放详细信息…

痛!“做C#半年,挣的不如做AI 1个月?”看到第二句泪目……
前两天在网上发现一个热门话题:“做开发一年,在北京月薪不到1万,有点迷茫。” 其中,这个回答我永远忘不了:来源:库库的派派知乎回答,已取得授权在这短短的一条信息里,小编佩服不仅…

刷新记录,算法开源!字节跳动获人体姿态估计竞赛双冠 | CVPR 2019
整理 | Jane出品 | AI科技大本营(id:rgznai100)【导读】6 月 16--20 日,计算机视觉与模式识别领域顶会 CVPR 2019 在美国长滩举行。每年的 CVPR 盛会除了精彩的论文分享、Workshop 与 Tutorial,还会举办多场涵盖计算机…

java 赋值,算术,一元操作符(翻译自Java Tutorials)
原文出自 http://www.cnblogs.com/ggjucheng/archive/2012/12/15/2819621.html 英文出自 http://docs.oracle.com/javase/tutorial/java/nutsandbolts/op1.html 简单赋值操作符 见到的最常用的操作符之一就是简单赋值操作符"".它把值从操作符的右边赋予到左边&#x…

初识Kubernetes(K8s):理论基础
Kubernetes是什么?Kubernetes,简称K8s,是用8代替8个字符“ubernete”而成的缩写。Kubernetes是Google开源的一个容器编排引擎,同时也是一个开源的容器集群管理系统,可以实现容器应用的自动化部署、自动扩缩容、监控和维…
Sobel算子及cvSobel
转自:http://blog.sina.com.cn/s/blog_4bdbec750100mufo.html 由于项目里要用到边缘检测,所以今天研究了一下最简单的梯度的方法。 首先,我们来开一下计算机是如何检测边缘的。以灰度图像为例,它的理论基础是这样的,如…

python全栈开发笔记---------函数
一 数学定义的函数与python中的函数 初中数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因…

OpenCV中的内存泄露问题(cvLoadImage,cvCloneImage)
转自:http://apps.hi.baidu.com/share/detail/30893646 在做项目的过程中,使用OpenCV经常会出现一些内存泄露问题,自己编写的程序出现问题还情有可原,但若是库函数调用和使用时出现,却很令我恼火。花了好长时间和实践的…

41款实用工具,数据获取、清洗、建模、可视化都有了
诸如结构式访谈、非结构式访谈、开放式问卷调查、封闭式问卷调查、记录评论和观察等技术统称为事实调查方法。这种事实调查方法和其他数据获取方法可以采取自动化,而不必使用人工方法。使用具有专用软件的物理设备(如终端、传感器和扫描仪等)…

OpenCV中的内存泄漏检测
转自:http://chaishushan.blog.163.com/blog/static/130192897200911685559809/ 内存泄漏时程序开发中经常遇到的问题. 而且出现内存泄漏很难检测,但是其导致的结果却是灾难性的. 这里讲一下opencv中内存泄漏检测的一些技巧.OpenCV中关于内存管理主要涉及到以下3个函…

一文全面了解基于内容的推荐算法
作者丨gongyouliu来源 | 转载自大数据与人工智能(ID:ai-big-data)这篇文章我们主要关注的是基于内容的推荐算法,它也是非常通用的一类推荐算法,在工业界有大量的应用案例。本文会从什么是基于内容的推荐算法、算法基本原理、应用场…

[Nginx优化]分享nginx配置文件及优化说明
1、系统及内核方面 根据服务器用途,建议系统最小化安装或针对web服务器进行系统内核重新编译;在内核参数的一些优化,如下: # Add net.ipv4.tcp_max_syn_backlog 65536 #表示SYN队列的长度 net.core.netdev_max_backlog 3…

laravel项目composer安装
1.下载 Composer (https://pkg.phpcomposer.com/#how-to-install-composer) 安装前请务必确保已经正确安装了 PHP。打开命令行窗口并执行 php -v 查看是否正确输出版本号。 打开命令行并依次执行下列命令安装最新版本的 Composer: 复制php -r…

淘宝装修:第一日 —— 图片轮播
先添加一个自定义内容区,进入源码编辑,如下图所示: 添加源码如下: <TABLE border0 cellSpacing0 cellPadding0 width773 height220> <TBODY> <TR> <TD width773> <P> <MARQUEE height220 behavi…

强化学习大规模应用还远吗?Youtube推荐已强势上线
来源 | 转载自深度传送门导读:本文将介绍在深度学习的强力驱动下,给推荐系统工业界所带来的最前沿的变化。本文主要根据几大顶会2019的最新论文,总结一下深度强化学习给推荐系统以及CTR预估工业界带来的最新进展。 凡是Google出品,…

layui select 与 vue 的结合使用
2019独角兽企业重金招聘Python工程师标准>>> 1. 创建一个select元素 <form class"layui-form layui-form-pane all-account-filter-form"><div class"layui-form-item"><div class"layui-inline"><label class&…

OpenCV 2.2.0 CvvImage的使用
转自:http://blog.csdn.net/raocong2010/archive/2011/01/17/6146158.aspx# 前几日,OpenCV 2.2.0版本出现了...但是...以前版本的CvvImage类不见了...为了能够继续使用这个类,下面把这个类的源代码贴出来,使用的时候将该代码加入到…

c/c++标准预定义宏
转自:http://www.eefocus.com/andysun001/blog/10-06/192018_008b3.html 一、标准预定义宏The standard predefined macros are specified by the relevant language standards, so they are available with all compilers that implement those standards. Older c…

阿里AI攻克心血管识别技术,冠脉中心线提取论文入选国际医学影像会议
阿里在医疗AI领域取得新进展,继创下肺结节检测、肝结节诊断技术的重大突破后,又攻克了难度系数更高的心血管识别技术。 近日,阿里达摩院机器智能实验室有关冠状动脉中心线提取的论文已被国际顶级医学影像会议MICCAI 2019提前接收。 阿里AI论…

自由程序员在国外
可靠的做法是,在一些像oDesk这样的网站上找一些临时开发任务,在Linked In网站上提交一份个人简历。这样将有助于你在出行后尽早的找到可干的项目,而不必到时大减价来抢其他程序员的活儿(或消减自己的预算)。 从来不缺乏你可以捐赠代码的开源项…

关于spring aop Advisor排序问题
关于spring aop Advisor排序问题 当我们使用多个Advisor的时候有时候需要排序,这时候可以用注解org.springframework.core.annotation.Order或者实现org.springframework.core.Ordered接口。 示例代码: import org.aspectj.lang.ProceedingJoinPoint; im…

NLP重大突破?一文读懂XLNet“屠榜”背后的原理
作者 | 李理 原文链接:https://fancyerii.github.io/2019/06/30/xlnet-theory/ 本文介绍XLNet的基本原理,读者阅读前需要了解BERT等相关模型,不熟悉的读者建议学习BERT课程。 语言模型和BERT各自的优缺点 在论文里作者使用了一些术语&#…

CSS3支持IE6, 7, and 8的边框属性
我们都知道,IE 6,7不支持新增加的CSS3属性,甚至与IE8是CSS3还没有完全准备好。你知道吗,今天给大家分享一个脚本工具,可以帮助您启用CSS3的支持IE浏览器(IE6)与新的CSS3属性,包括:bo…

解决:VS 2005/2008 中 fstream 不能处理带有中文路径的问题
转自:http://blog.csdn.net/code_robot/archive/2010/06/23/5688867.aspx 有时候用ifstream或ofstream打开带有中文路径的文件会失败。 解决办法:1、使用C语言的函数设置为中文运行环境setlocale(LC_ALL,"Chinese-simplified"); 2、使用STL函…

NLP文本标注工具与平台(数据标注公司)
最近在做NLP相关项目,包括句法分析、情感分析等,有大量数据需要标注。我评估了几个文本标注工具,也接触了几家数据标注公司和平台,总结如下,供各位参考。 文本标注平台(标注外包公司) 数据标注公…