前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、word2vec

学习笔记CB011:lucene搜索引擎库、IKAnalyzer中文切词工具、检索服务、word2vec

原创
作者头像
利炳根
发布2018-04-21 09:17:29
1.8K3
发布2018-04-21 09:17:29
举报
文章被收录于专栏:利炳根的专栏

影视剧字幕聊天语料库特点,把影视剧说话内容一句一句以回车换行罗列三千多万条中国话,相邻第二句很可能是第一句最好回答。一个问句有很多种回答,可以根据相关程度以及历史聊天记录所有回答排序,找到最优,是一个搜索排序过程。

lucene+ik。lucene开源免费搜索引擎库,java语言开发。ik IKAnalyzer,开源中文切词工具。语料库切词建索引,文本搜索做文本相关性检索,把下一句取出作答案候选集,答案排序,问题分析。

建索引。eclipse创建maven工程,maven自动生成pom.xml文件,配置包依赖信息,dependencies标签中添加依赖:

代码语言:txt
复制
<dependency>
代码语言:txt
复制
    <groupId>org.apache.lucene</groupId>
代码语言:txt
复制
    <artifactId>lucene-core</artifactId>
代码语言:txt
复制
    <version>4.10.4</version>
代码语言:txt
复制
</dependency>
代码语言:txt
复制
<dependency>
代码语言:txt
复制
    <groupId>org.apache.lucene</groupId>
代码语言:txt
复制
    <artifactId>lucene-queryparser</artifactId>
代码语言:txt
复制
    <version>4.10.4</version>
代码语言:txt
复制
</dependency>
代码语言:txt
复制
<dependency>
代码语言:txt
复制
    <groupId>org.apache.lucene</groupId>
代码语言:txt
复制
    <artifactId>lucene-analyzers-common</artifactId>
代码语言:txt
复制
    <version>4.10.4</version>
代码语言:txt
复制
</dependency>
代码语言:txt
复制
<dependency>
代码语言:txt
复制
    <groupId>io.netty</groupId>
代码语言:txt
复制
    <artifactId>netty-all</artifactId>
代码语言:txt
复制
    <version>5.0.0.Alpha2</version>
代码语言:txt
复制
</dependency>
代码语言:txt
复制
<dependency>
代码语言:txt
复制
    <groupId>com.alibaba</groupId>
代码语言:txt
复制
    <artifactId>fastjson</artifactId>
代码语言:txt
复制
    <version>1.1.41</version>
代码语言:txt
复制
</dependency>

project标签增加配置,依赖jar包自动拷贝lib目录:

代码语言:txt
复制
<build>
代码语言:txt
复制
  <plugins>
代码语言:txt
复制
    <plugin>
代码语言:txt
复制
      <groupId>org.apache.maven.plugins</groupId>
代码语言:txt
复制
      <artifactId>maven-dependency-plugin</artifactId>
代码语言:txt
复制
      <executions>
代码语言:txt
复制
        <execution>
代码语言:txt
复制
          <id>copy-dependencies</id>
代码语言:txt
复制
          <phase>prepare-package</phase>
代码语言:txt
复制
          <goals>
代码语言:txt
复制
            <goal>copy-dependencies</goal>
代码语言:txt
复制
          </goals>
代码语言:txt
复制
          <configuration>
代码语言:txt
复制
            <outputDirectory>${project.build.directory}/lib</outputDirectory>
代码语言:txt
复制
            <overWriteReleases>false</overWriteReleases>
代码语言:txt
复制
            <overWriteSnapshots>false</overWriteSnapshots>
代码语言:txt
复制
            <overWriteIfNewer>true</overWriteIfNewer>
代码语言:txt
复制
          </configuration>
代码语言:txt
复制
        </execution>
代码语言:txt
复制
      </executions>
代码语言:txt
复制
    </plugin>
代码语言:txt
复制
    <plugin>
代码语言:txt
复制
      <groupId>org.apache.maven.plugins</groupId>
代码语言:txt
复制
      <artifactId>maven-jar-plugin</artifactId>
代码语言:txt
复制
      <configuration>
代码语言:txt
复制
        <archive>
代码语言:txt
复制
          <manifest>
代码语言:txt
复制
            <addClasspath>true</addClasspath>
代码语言:txt
复制
            <classpathPrefix>lib/</classpathPrefix>
代码语言:txt
复制
            <mainClass>theMainClass</mainClass>
代码语言:txt
复制
          </manifest>
代码语言:txt
复制
        </archive>
代码语言:txt
复制
      </configuration>
代码语言:txt
复制
    </plugin>
代码语言:txt
复制
  </plugins>
代码语言:txt
复制
</build>

https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/ik-analyzer/IK%20Analyzer%202012FF_hf1_source.rar 下载ik源代码把src/org目录拷到chatbotv1工程src/main/java下,刷新maven工程。

com.shareditor.chatbotv1包下maven自动生成App.java,改成Indexer.java:

代码语言:txt
复制
Analyzer analyzer = new IKAnalyzer(true);
代码语言:txt
复制
IndexWriterConfig iwc = new IndexWriterConfig(Version.LUCENE_4_9, analyzer);
代码语言:txt
复制
iwc.setOpenMode(OpenMode.CREATE);
代码语言:txt
复制
iwc.setUseCompoundFile(true);
代码语言:txt
复制
IndexWriter indexWriter = new IndexWriter(FSDirectory.open(new File(indexPath)), iwc);
代码语言:txt
复制
BufferedReader br = new BufferedReader(new InputStreamReader(
代码语言:txt
复制
        new FileInputStream(corpusPath), "UTF-8"));
代码语言:txt
复制
String line = "";
代码语言:txt
复制
String last = "";
代码语言:txt
复制
long lineNum = 0;
代码语言:txt
复制
while ((line = br.readLine()) != null) {
代码语言:txt
复制
	line = line.trim();
代码语言:txt
复制
	if (0 == line.length()) {
代码语言:txt
复制
		continue;
代码语言:txt
复制
	}
代码语言:txt
复制
	if (!last.equals("")) {
代码语言:txt
复制
		Document doc = new Document();
代码语言:txt
复制
		doc.add(new TextField("question", last, Store.YES));
代码语言:txt
复制
		doc.add(new StoredField("answer", line));
代码语言:txt
复制
		indexWriter.addDocument(doc);
代码语言:txt
复制
	}
代码语言:txt
复制
	last = line;
代码语言:txt
复制
	lineNum++;
代码语言:txt
复制
	if (lineNum % 100000 == 0) {
代码语言:txt
复制
		System.out.println("add doc " + lineNum);
代码语言:txt
复制
	}
代码语言:txt
复制
}
代码语言:txt
复制
br.close();
代码语言:txt
复制
indexWriter.forceMerge(1);
代码语言:txt
复制
indexWriter.close();

编译拷贝src/main/resources所有文件到target目录,target目录执行

代码语言:txt
复制
java -cp $CLASSPATH:./lib/:./chatbotv1-0.0.1-SNAPSHOT.jar com.shareditor.chatbotv1.Indexer ../../subtitle/raw_subtitles/subtitle.corpus ./index

生成索引目录index通过lukeall-4.9.0.jar查看。

检索服务。netty创建http服务server,代码在https://github.com/warmheartli/ChatBotCourse的chatbotv1目录:

代码语言:txt
复制
Analyzer analyzer = new IKAnalyzer(true);
代码语言:txt
复制
QueryParser qp = new QueryParser(Version.LUCENE_4_9, "question", analyzer);
代码语言:txt
复制
if (topDocs.totalHits == 0) {
代码语言:txt
复制
	qp.setDefaultOperator(Operator.AND);
代码语言:txt
复制
	query = qp.parse(q);
代码语言:txt
复制
	System.out.println(query.toString());
代码语言:txt
复制
	indexSearcher.search(query, collector);
代码语言:txt
复制
	topDocs = collector.topDocs();
代码语言:txt
复制
}
代码语言:txt
复制
if (topDocs.totalHits == 0) {
代码语言:txt
复制
	qp.setDefaultOperator(Operator.OR);
代码语言:txt
复制
	query = qp.parse(q);
代码语言:txt
复制
	System.out.println(query.toString());
代码语言:txt
复制
	indexSearcher.search(query, collector);
代码语言:txt
复制
	topDocs = collector.topDocs();
代码语言:txt
复制
}
代码语言:txt
复制
ret.put("total", topDocs.totalHits);
代码语言:txt
复制
ret.put("q", q);
代码语言:txt
复制
JSONArray result = new JSONArray();
代码语言:txt
复制
for (ScoreDoc d : topDocs.scoreDocs) {
代码语言:txt
复制
	Document doc = indexSearcher.doc(d.doc);
代码语言:txt
复制
	String question = doc.get("question");
代码语言:txt
复制
	String answer = doc.get("answer");
代码语言:txt
复制
	JSONObject item = new JSONObject();
代码语言:txt
复制
	item.put("question", question);
代码语言:txt
复制
	item.put("answer", answer);
代码语言:txt
复制
	item.put("score", d.score);
代码语言:txt
复制
	item.put("doc", d.doc);
代码语言:txt
复制
	result.add(item);
代码语言:txt
复制
}
代码语言:txt
复制
ret.put("result", result);

查询索引,query词做切词拼lucene query,检索索引question字段,匹配返回answer字段值作候选集,挑出候选集一条作答案。server通过http访问,如http://127.0.0.1:8765/?q=hello 。中文需转urlcode发送,java端读取按urlcode解析,server启动方法:

代码语言:txt
复制
java -cp $CLASSPATH:./lib/:./chatbotv1-0.0.1-SNAPSHOT.jar com.shareditor.chatbotv1.Searcher

聊天界面。一个展示聊天内容框框,选择ckeditor,支持html格式内容展示,一个输入框和发送按钮,html代码:

代码语言:txt
复制
<div class="col-sm-4 col-xs-10">
代码语言:txt
复制
    <div class="row">
代码语言:txt
复制
        <textarea id="chatarea">
代码语言:txt
复制
            <div style='color: blue; text-align: left; padding: 5px;'>机器人: 喂,大哥您好,您终于肯跟我聊天了,来侃侃呗,我来者不拒!</div>
代码语言:txt
复制
            <div style='color: blue; text-align: left; padding: 5px;'>机器人: 啥?你问我怎么这么聪明会聊天?因为我刚刚吃了一堆影视剧字幕!</div>
代码语言:txt
复制
        </textarea>
代码语言:txt
复制
    </div>
代码语言:txt
复制
    <br />
代码语言:txt
复制
    <div class="row">
代码语言:txt
复制
        <div class="input-group">
代码语言:txt
复制
            <input type="text" id="input" class="form-control" autofocus="autofocus" onkeydown="submitByEnter()" />
代码语言:txt
复制
            <span class="input-group-btn">
代码语言:txt
复制
            <button class="btn btn-default" type="button" onclick="submit()">发送</button>
代码语言:txt
复制
          </span>
代码语言:txt
复制
        </div>
代码语言:txt
复制
    </div>
代码语言:txt
复制
</div>
代码语言:txt
复制
<script type="text/javascript">
代码语言:txt
复制
        CKEDITOR.replace('chatarea',
代码语言:txt
复制
                {
代码语言:txt
复制
                    readOnly: true,
代码语言:txt
复制
                    toolbar: ['Source'],
代码语言:txt
复制
                    height: 500,
代码语言:txt
复制
                    removePlugins: 'elementspath',
代码语言:txt
复制
                    resize_enabled: false,
代码语言:txt
复制
                    allowedContent: true
代码语言:txt
复制
                });
代码语言:txt
复制
</script>

调用聊天server,要一个发送请求获取结果控制器:

代码语言:txt
复制
public function queryAction(Request $request)
代码语言:txt
复制
{
代码语言:txt
复制
    $q = $request->get('input');
代码语言:txt
复制
    $opts = array(
代码语言:txt
复制
        'http'=>array(
代码语言:txt
复制
            'method'=>"GET",
代码语言:txt
复制
            'timeout'=>60,
代码语言:txt
复制
        )
代码语言:txt
复制
    );
代码语言:txt
复制
    $context = stream_context_create($opts);
代码语言:txt
复制
    $clientIp = $request->getClientIp();
代码语言:txt
复制
    $response = file_get_contents('http://127.0.0.1:8765/?q=' . urlencode($q) . '&clientIp=' . $clientIp, false, $context);
代码语言:txt
复制
    $res = json_decode($response, true);
代码语言:txt
复制
    $total = $res['total'];
代码语言:txt
复制
    $result = '';
代码语言:txt
复制
    if ($total > 0) {
代码语言:txt
复制
        $result = $res['result'][0]['answer'];
代码语言:txt
复制
    }
代码语言:txt
复制
    return new Response($result);
代码语言:txt
复制
}

控制器路由配置:

代码语言:txt
复制
chatbot_query:
代码语言:txt
复制
    path:     /chatbot/query
代码语言:txt
复制
    defaults: { _controller: AppBundle:ChatBot:query }

聊天server响应时间比较长,不导致web界面卡住,执行submit时异步发请求和收结果:

代码语言:txt
复制
var xmlHttp;
代码语言:txt
复制
function submit() {
代码语言:txt
复制
    if (window.ActiveXObject) {
代码语言:txt
复制
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
代码语言:txt
复制
    }
代码语言:txt
复制
    else if (window.XMLHttpRequest) {
代码语言:txt
复制
        xmlHttp = new XMLHttpRequest();
代码语言:txt
复制
    }
代码语言:txt
复制
    var input = $("#input").val().trim();
代码语言:txt
复制
    if (input == '') {
代码语言:txt
复制
        jQuery('#input').val('');
代码语言:txt
复制
        return;
代码语言:txt
复制
    }
代码语言:txt
复制
    addText(input, false);
代码语言:txt
复制
    jQuery('#input').val('');
代码语言:txt
复制
    var datastr = "input=" + input;
代码语言:txt
复制
    datastr = encodeURI(datastr);
代码语言:txt
复制
    var url = "/chatbot/query";
代码语言:txt
复制
    xmlHttp.open("POST", url, true);
代码语言:txt
复制
    xmlHttp.onreadystatechange = callback;
代码语言:txt
复制
    xmlHttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
代码语言:txt
复制
    xmlHttp.send(datastr);
代码语言:txt
复制
}
代码语言:txt
复制
function callback() {
代码语言:txt
复制
    if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
代码语言:txt
复制
        var responseText = xmlHttp.responseText;
代码语言:txt
复制
        addText(responseText, true);
代码语言:txt
复制
    }
代码语言:txt
复制
}

addText往ckeditor添加一段文本:

代码语言:txt
复制
function addText(text, is_response) {
代码语言:txt
复制
    var oldText = CKEDITOR.instances.chatarea.getData();
代码语言:txt
复制
    var prefix = '';
代码语言:txt
复制
    if (is_response) {
代码语言:txt
复制
        prefix = "<div style='color: blue; text-align: left; padding: 5px;'>机器人: "
代码语言:txt
复制
    } else {
代码语言:txt
复制
        prefix = "<div style='color: darkgreen; text-align: right; padding: 5px;'>我: "
代码语言:txt
复制
    }
代码语言:txt
复制
    CKEDITOR.instances.chatarea.setData(oldText + "" + prefix + text + "</div>");
代码语言:txt
复制
}

代码:

https://github.com/warmheartli/ChatBotCourse

https://github.com/warmheartli/shareditor.com

效果演示:http://www.shareditor.com/chatbot/

导流。统计网站流量情况。cnzz统计看最近半个月受访页面流量情况,用户访问集中页面。增加图库动态按钮。吸引用户点击,在每个页面右下角放置动态小图标,页面滚动它不动,用户点了直接跳到想要引流的页面。搜客服漂浮代码。

创建js文件,lrtk.js :

代码语言:txt
复制
$(function()
代码语言:txt
复制
{
代码语言:txt
复制
    var tophtml="<a href=\"http://www.shareditor.com/chatbot/\" target=\"_blank\"><div id=\"izl_rmenu\" class=\"izl-rmenu\"><div class=\"btn btn-phone\"></div><div class=\"btn btn-top\"></div></div></a>";
代码语言:txt
复制
    $("#top").html(tophtml);
代码语言:txt
复制
    $("#izl_rmenu").each(function()
代码语言:txt
复制
    {
代码语言:txt
复制
        $(this).find(".btn-phone").mouseenter(function()
代码语言:txt
复制
        {
代码语言:txt
复制
            $(this).find(".phone").fadeIn("fast");
代码语言:txt
复制
        });
代码语言:txt
复制
        $(this).find(".btn-phone").mouseleave(function()
代码语言:txt
复制
        {
代码语言:txt
复制
            $(this).find(".phone").fadeOut("fast");
代码语言:txt
复制
        });
代码语言:txt
复制
        $(this).find(".btn-top").click(function()
代码语言:txt
复制
        {
代码语言:txt
复制
            $("html, body").animate({
代码语言:txt
复制
                "scroll-top":0
代码语言:txt
复制
            },"fast");
代码语言:txt
复制
        });
代码语言:txt
复制
    });
代码语言:txt
复制
    var lastRmenuStatus=false;
代码语言:txt
复制
    $(window).scroll(function()
代码语言:txt
复制
    {
代码语言:txt
复制
        var _top=$(window).scrollTop();
代码语言:txt
复制
        if(_top>=0)
代码语言:txt
复制
        {
代码语言:txt
复制
            $("#izl_rmenu").data("expanded",true);
代码语言:txt
复制
        }
代码语言:txt
复制
        else
代码语言:txt
复制
        {
代码语言:txt
复制
            $("#izl_rmenu").data("expanded",false);
代码语言:txt
复制
        }
代码语言:txt
复制
        if($("#izl_rmenu").data("expanded")!=lastRmenuStatus)
代码语言:txt
复制
        {
代码语言:txt
复制
            lastRmenuStatus=$("#izl_rmenu").data("expanded");
代码语言:txt
复制
            if(lastRmenuStatus)
代码语言:txt
复制
            {
代码语言:txt
复制
                $("#izl_rmenu .btn-top").slideDown();
代码语言:txt
复制
            }
代码语言:txt
复制
            else
代码语言:txt
复制
            {
代码语言:txt
复制
                $("#izl_rmenu .btn-top").slideUp();
代码语言:txt
复制
            }
代码语言:txt
复制
        }
代码语言:txt
复制
    });
代码语言:txt
复制
});

上半部分定义id=top的div标签内容。一个id为izl_rmenu的div,css格式定义在另一个文件lrtk.css里:

代码语言:txt
复制
.izl-rmenu{position:fixed;left:85%;bottom:10px;padding-bottom:73px;z-index:999;}
代码语言:txt
复制
.izl-rmenu .btn{width:72px;height:73px;margin-bottom:1px;cursor:pointer;position:relative;}
代码语言:txt
复制
.izl-rmenu .btn-top{background:url(http://www.shareditor.com/uploads/media/default/0001/01/thumb_416_default_big.png) 0px 0px no-repeat;background-size: 70px 70px;display:none;}

下半部分当页面滚动时div展开。

在所有页面公共代码部分增加

代码语言:txt
复制
<div id="top"></div>

庞大语料库运用,LSTM-RNN训练,中文语料转成算法识别向量形式,最强大word embedding工具word2vec。

word2vec输入切词文本文件,影视剧字幕语料库回车换行分隔完整句子,所以我们先对其做切词,word_segment.py文件:

代码语言:txt
复制
# coding:utf-8
代码语言:txt
复制
import sys
代码语言:txt
复制
import importlib
代码语言:txt
复制
importlib.reload(sys)
代码语言:txt
复制
import jieba
代码语言:txt
复制
from jieba import analyse
代码语言:txt
复制
def segment(input, output):
代码语言:txt
复制
    input_file = open(input, "r")
代码语言:txt
复制
    output_file = open(output, "w")
代码语言:txt
复制
    while True:
代码语言:txt
复制
        line = input_file.readline()
代码语言:txt
复制
        if line:
代码语言:txt
复制
            line = line.strip()
代码语言:txt
复制
            seg_list = jieba.cut(line)
代码语言:txt
复制
            segments = ""
代码语言:txt
复制
            for str in seg_list:
代码语言:txt
复制
                segments = segments + " " + str
代码语言:txt
复制
            segments = segments + "\n"
代码语言:txt
复制
            output_file.write(segments)
代码语言:txt
复制
        else:
代码语言:txt
复制
            break
代码语言:txt
复制
    input_file.close()
代码语言:txt
复制
    output_file.close()
代码语言:txt
复制
if __name__ == '__main__':
代码语言:txt
复制
    if 3 != len(sys.argv):
代码语言:txt
复制
        print("Usage: ", sys.argv[0], "input output")
代码语言:txt
复制
        sys.exit(-1)
代码语言:txt
复制
    segment(sys.argv[1], sys.argv[2]);

使用:

代码语言:txt
复制
python word_segment.py subtitle/raw_subtitles/subtitle.corpus segment_result

word2vec生成词向量。word2vec可从https://github.com/warmheartli/ChatBotCourse/tree/master/word2vec获取,make编译生成二进制文件。

执行:

代码语言:txt
复制
./word2vec -train ../segment_result -output vectors.bin -cbow 1 -size 200 -window 8 -negative 25 -hs 0 -sample 1e-4 -threads 20 -binary 1 -iter 15

生成vectors.bin词向量,二进制格式,word2vec自带distance工具来验证:

代码语言:txt
复制
./distance vectors.bin

词向量二进制文件格式加载。word2vec生成词向量二进制格式:词数目(空格)向量维度。

加载词向量二进制文件python脚本:

代码语言:txt
复制
# coding:utf-8
代码语言:txt
复制
import sys
代码语言:txt
复制
import struct
代码语言:txt
复制
import math
代码语言:txt
复制
import numpy as np
代码语言:txt
复制
reload(sys)
代码语言:txt
复制
sys.setdefaultencoding( "utf-8" )
代码语言:txt
复制
max_w = 50
代码语言:txt
复制
float_size = 4
代码语言:txt
复制
def load_vectors(input):
代码语言:txt
复制
    print "begin load vectors"
代码语言:txt
复制
    input_file = open(input, "rb")
代码语言:txt
复制
    # 获取词表数目及向量维度
代码语言:txt
复制
    words_and_size = input_file.readline()
代码语言:txt
复制
    words_and_size = words_and_size.strip()
代码语言:txt
复制
    words = long(words_and_size.split(' ')[0])
代码语言:txt
复制
    size = long(words_and_size.split(' ')[1])
代码语言:txt
复制
    print "words =", words
代码语言:txt
复制
    print "size =", size
代码语言:txt
复制
    word_vector = {}
代码语言:txt
复制
    for b in range(0, words):
代码语言:txt
复制
        a = 0
代码语言:txt
复制
        word = ''
代码语言:txt
复制
        # 读取一个词
代码语言:txt
复制
        while True:
代码语言:txt
复制
            c = input_file.read(1)
代码语言:txt
复制
            word = word + c
代码语言:txt
复制
            if False == c or c == ' ':
代码语言:txt
复制
                break
代码语言:txt
复制
            if a < max_w and c != '\n':
代码语言:txt
复制
                a = a + 1
代码语言:txt
复制
        word = word.strip()
代码语言:txt
复制
        # 读取词向量
代码语言:txt
复制
        vector = np.empty([200])
代码语言:txt
复制
        for index in range(0, size):
代码语言:txt
复制
            m = input_file.read(float_size)
代码语言:txt
复制
            (weight,) = struct.unpack('f', m)
代码语言:txt
复制
            vector[index] = weight
代码语言:txt
复制
        # 将词及其对应的向量存到dict中
代码语言:txt
复制
        word_vector[word.decode('utf-8')] = vector
代码语言:txt
复制
    input_file.close()
代码语言:txt
复制
    print "load vectors finish"
代码语言:txt
复制
    return word_vector
代码语言:txt
复制
if __name__ == '__main__':
代码语言:txt
复制
    if 2 != len(sys.argv):
代码语言:txt
复制
        print "Usage: ", sys.argv[0], "vectors.bin"
代码语言:txt
复制
        sys.exit(-1)
代码语言:txt
复制
    d = load_vectors(sys.argv[1])
代码语言:txt
复制
    print d[u'真的']

运行方式如下:

代码语言:txt
复制
python word_vectors_loader.py vectors.bin

参考资料:

《Python 自然语言处理》

http://www.shareditor.com/blogshow?blogId=113

http://www.shareditor.com/blogshow?blogId=114

http://www.shareditor.com/blogshow?blogId=115

欢迎推荐上海机器学习工作机会,我的微信:qingxingfengzi

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
NLP 服务
NLP 服务(Natural Language Process,NLP)深度整合了腾讯内部的 NLP 技术,提供多项智能文本处理和文本生成能力,包括词法分析、相似词召回、词相似度、句子相似度、文本润色、句子纠错、文本补全、句子生成等。满足各行业的文本智能需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档