ã¨ã ã¹ãªã¼ã¨ã³ã¸ãã¢ãªã³ã°ã°ã«ã¼ã AIã»æ©æ¢°å¦ç¿ãã¼ã ã§ã½ããã¦ã§ã¢ã¨ã³ã¸ãã¢ããã¦ããä¸æ(@po3rin) ã§ãã好ããªè¨èªã¯Goãæ å ±æ¤ç´¢ç³»ã®è©±ã好ç©ã§ãã
ä»åã¯ãããä¸ã«å ¬éããã¦ããå»çç¨èªè¾æ¸ãæ¤ç´¢ç¹åãããããã«çµ±è¨çè¤åèªåå²ã試ããã話ã§ãã
- å»çç¨èªè¾æ¸ãæ¤ç´¢ã§ä½¿ãéã®åé¡
- 対æ°å°¤åº¦æ¯ã使ã£ãè¤åèªåå²
- ã¯ã¨ãªãã°ãå«ããLLR
- ã¾ã¨ã
å»çç¨èªè¾æ¸ãæ¤ç´¢ã§ä½¿ãéã®åé¡
è¾æ¸ã®è¤åèªåå²åé¡
ç¾å¨å ¬éããã¦ããå»çç¨èªè¾æ¸ã«ã¯æ§ã ãªãã®ãããã¾ããä¾ãã°ComeJisyoã¯å½¢æ ç´ è§£æã§ã®ç¨éãæ³å®ããå»çç¨èªè¾æ¸ã§ããããããããããã®ã¾ã¾æ¤ç´¢ç¨ã®è¾æ¸ã¨ãã¦å©ç¨ããã¨ãè¾æ¸ã«ç»é²ããã¦ãããã®ã¾ã¾ã®è¡¨ç¾ã§ãªãã¨æ¤ç´¢ã¯ã¨ãªã«ãããããªãã¨ããåé¡ãçºçãã¾ãã
ä¾ãã°ãElasticsearchã§kuromojiãå©ç¨ãã¦ã¦ã¼ã¶ã¼è¾æ¸ã¨ãã¦ComeJisyoãå©ç¨ã§ãã¾ãããComeJisyoããã®ã¾ã¾ã®å½¢ã§ç»é²ãã¦ä½¿ãã¨ããã®è¡¨ç¾ã§å¿ ãããã¥ã¡ã³ããå½¢æ ç´ è§£æããã¦ãã¾ãã¾ããã¤ã¾ããããã¾ç¹ãã¨ããã¯ã¨ãªã«å¯¾ãã¦ãComeJisyoã«å®ç¾©ããã¦ãããã¢ã¬ã«ã®ã¼æ§ããã¾ç¹ããå«ãããã¥ã¡ã³ãããããããªãã¨ããç¾è±¡ãçºçãã¾ãã
ç¹ã«æ¥æ¬èªã®å»çç¨èªã¯è¤åèªãé常ã«å¤ããå»çèªç¶è¨èªå¦çã§ã¯1ã¤ã®å£ã¨ãã¦ç«ã¡ã¯ã ããã¾ããå»çç¨èªã®è¤åèªã®æ§æè¦ç´ ã決å®ããããã®ç 究ãåå¨ããå»çç¨èªã®æ§æèªã®æå³çã«ãã´ãªã¼ãåé¡ãã試ã¿ãããã¾ãã
è¾æ¸ã«ããè¤åèªåå²ã®æå®
ãã®åé¡ã®ï¼ã¤ã®è§£æ±ºçã¨ãã¦ã¦ã¼ã¶ã¼è¾æ¸å ã§åè§ã¹ãã¼ã¹ã使ã£ã¦è¤åèªã®åå²ãæå®ããæ¹æ³ãããã¾ãã
# ãã®ã¾ã¾ã ã¨ãã¢ã¬ã«ã®ã¼æ§ã®ããã¾ç¹ãã¨ããã¯ã¨ãªã§ãããããªã ã¢ã¬ã«ã®ã¼æ§ããã¾ç¹,ã¢ã¬ã«ã®ã¼æ§ããã¾ç¹,ã¢ã¬ã«ã®ã¼ã»ã¤ã¸ã³ãã·ã³,ã«ã¹ã¿ã åè© # ãã¢ã¬ã«ã®ã¼æ§ã®ããã¾ç¹ãã¨ããã¯ã¨ãªã§ããããã ã¢ã¬ã«ã®ã¼æ§ããã¾ç¹,ã¢ã¬ã«ã®ã¼ æ§ ããã¾ç¹,ã¢ã¬ã«ã®ã¼ ã»ã¤ ã¸ã³ãã·ã³,ã«ã¹ã¿ã åè©
æè¿å¼ç¤¾ã§ã¯å½¢æ ç´ è§£æå¨ãSudachiã«ç§»è¡ãã¦è¾æ¸ã®è¡¨ç¾ãããè±ãã«ãªããåå²æå®ãæè»ã«ã§ããããã«ãªãã¾ãããSudachiã§ã®åèªåå²ã«èå³ãããæ¹ã¯æ¯éå¼ç¤¾ã®ããã°ãã覧ãã ããã
https://www.m3tech.blog/entry/sudachi-es
åå²åä½ãã©ã®ããã«æ±ºãããåé¡
è¾æ¸ã«åå²æ å ±ãå ¥ããæ¹æ³ãç´¹ä»ãã¾ããããå»çç¨èªè¾æ¸ã®ç»é²èªã¯æ°ãå¤ããããã1ã¤1ã¤ç®è¦ã§åå²ãã¦ããã®ã¯ããªãè¾ãã®ã§ãåå²åä½ãã©ã®ããã«èªåã§æ±ºå®ããããä»åã®æ¬é¡ã«ãªãã¾ãã
å¼ç¤¾ã§ã¯ç¾å¨ãè¤åèªåå²ã®èªååã«å¯¾å¿ããæ¹æ³ã¨ãã¦ãSudachiã«ããå½¢æ ç´ è§£æçµæããã®ã¾ã¾åå²æ å ±ã¨ãã¦è¾æ¸ã«ç»é²ãã¦ãã¾ãããããSudachiã®Aã¢ã¼ãã¯çåä½ã§ã®åå²ãªã®ã§ãåå²ãããããã¨ãåé¡ã«ãªãã¾ããä¾ãã°ãå容ä½ããªã©ã®åèªã¯Sudachiã®Aã¢ã¼ãã ã¨ãå容ãã¨ãä½ãã«åå²ããã¾ãããã®çµæãä½ãã¨ããã¯ã¨ãªã§ãå容ä½ããããããã¦ãã¾ãã¾ãããä½ãã¨ãå容ä½ãã¯å ¨ãæå³ãéãã®ã§ããããããªãã®ãæã¾ããåä½ã§ãããããã®ããè¤åèªãæ¤ç´¢ç¨éã«åãããã«ããé©åã«åå²ãçµåããå¿ è¦ãããã¾ãããå容ä½ãã®ä¾ã§ã¯ãå容/ä½ãã¨åå²ãããªããããªå¤æãä½ãããã®æ¹æ³ã§èªåã§è¡ãå¿ è¦ãããã¾ãã
対æ°å°¤åº¦æ¯ã使ã£ãè¤åèªåå²
ããã§çµ±è¨çã«è¤åèªã®åå²ã決ããææ³ãæ¡ç¨ããå»çè¾æ¸ã®è¤åèªãæ¤ç´¢ç¨ã«æé©ã«åå²ããæ¹æ³ãæ¤è¨ãã¾ããä»åã¯å¯¾æ°å°¤åº¦æ¯(LLR)ã使ã£ã¦å»çç¨èªã®åå²ã試ã¿ã¾ãã
対æ°å°¤åº¦æ¯ã¨ã¯
対æ°å°¤åº¦æ¯ (Log-Likelihood Ratio) ã¯ãã帰ç¡ä»®èª¬ã«å¾ã£ã¦å¾ãããçµæã«å¯¾ãã¦ã対ç«ä»®èª¬ã§å¾ãããçµæãã帰ç¡ä»®èª¬ã®çµæã®ãå°¤ããããããæå³ããææ¨ã§ãã対æ°å°¤åº¦æ¯ã¯èªç¶è¨èªå¦çã®åéã«ããã¦ãå¤ãå©ç¨ãããè¤åèªå¤å®ã ãã§ãªããã³ãã±ã¼ã·ã§ã³æ½åºãQuery Understandingãªã©ã§ãå©ç¨ããã¾ãã
ã³ãã±ã¼ã·ã§ã³æ½åºã«ããã¦LLRãå©ç¨ããæ¹æ³ã«ã¤ãã¦ã¯ä¸è¨ã®æ¸ç±ã«è§£èª¬ãããã¾ãã
ä»åã¯LLRã®çè«çãªå°åºã¾ã§ã¯è§¦ããã«ãè¨ç®æ¹æ³ã ãç°¡åã«ãä¼ããã¾ããèå³ã®ããæ¹ã¯ãThe Statistics of Word Cooccurrences Word Pairs and Collocationsãã®Chapter3ã詳ãã解説ãã¦ããã®ã§ããã¡ããã覧ãã ãããLemmaã«ãç´°ããè¨ç®éç¨ãè¨è¿°ããã¦ãã¾ãã
è¤åèªã¨ãã¦ç»é²ãã¹ããã©ããã®ã¹ã³ã¢ãLLRã¨ãã¦ç®åºããæ¹æ³ã«ã¤ãã¦è§£èª¬ãã¾ãã ãå容ä½ããä¾ã«åã£ãã¨ããå ±èµ·æ å ±ãä¸è¨ã®ããã«åå²è¡¨ã«ã¾ã¨ãã¾ãã
ãä½ã | ãä½ã以å¤ã®åèª | åè¨ | |
---|---|---|---|
ãå容ã | |||
ãå容ã以å¤ã®åèª | |||
åè¨ | N |
ç°¡åã«èª¬æããã¨
- ãå容ããåºç¾ããå¾ã«ãä½ããç¶ããæ°ã
- ãå容ããåºç¾ããå¾ã«ãä½ã以å¤ã®åèªç¶ããæ°ã
- ãå容ã以å¤ã®åèªãåºç¾ããå¾ã«ãä½ããç¶ããæ°ã
- ãå容ã以å¤ã®åèªãåºç¾ããå¾ã«ãä½ã以å¤ã®åèªç¶ããæ°ã
ã¨ãã¾ãã
対æ°å°¤åº¦æ¯()ã¯ä¸è¨ã®å¼ã§è¨ç®ã§ãã¾ãã
ãã㧠ã¨ãã㨠ã¯
ã¨ç°¡åãªå½¢ã«æ¸ãä¸ãã¾ãããã£ã¦å¯¾æ°å°¤åº¦æ¯ãç®åºããããã«ã¯ï¼åå²è¡¨ã®å ¨ã¦ã®ã»ã«ã«ãã㦠ãè¨ç®ãã¦ããã¾ãã
ä»åã¯ãã®ã®å¤ãè¤åèªã¨ãã¦ç»é²ãããã©ãããå¤æããããã®ã¹ã³ã¢ã¨ãã¦ç´æ¥å©ç¨ãã¾ããLLRãé«ãã»ã©å ±èµ·ããå¯è½æ§ãé«ãåèªãªã®ã§ãè¾æ¸ç»é²æã«åå²ããªãã¨ããå¤æã«ãªãã¾ãã
å»çç¨èªè¾æ¸ã対æ°å°¤åº¦æ¯ã§è¤åèªåå²ããªãåèªãæ½åº
Pythonã§LLRãå®è£ ãComeJisyoã®è¤åèªã®åå²ã決ããã¹ã³ã¢ãåºåãã¦ã¿ã¾ããè¤åèªãè¾æ¸ç»é²æã«åå²ãããããªãããå¤æããå¢çã¯Sudachiã®Aã¢ã¼ãã®åå²åä½ã¨ãã¾ããä»å使ç¨ããComeJisyoã¯2020å¹´7æã«å ¬éããã¦ããComeJisyoUtf8-2r1ãå©ç¨ãã¾ãã
ã¾ãã¯ã¢ã¸ã¥ã¼ã«ã®importã§ããè¤åèªã®åå²åè£ã決ããããã«Sudachiãå©ç¨ãã¾ãã
import math from collections import Counter from typing import List, Dict import pandas as pd from sudachipy import tokenizer from sudachipy import dictionary
ã¾ãã¯ãã¼ã¿ãèªã¿è¾¼ã¿ã¾ãã
# ComeJisyoã«headerããªãã®ã§ãã¡ãã§ã«ã©ã åãå®ç¾©ãã¦filter df = pd.read_csv('./../resources/ComeJisyoUtf8-2r1.csv',header=None, names=['word','a','b','c','pos','e','f','g','h','i','j','k','l','m']) df = df[['word', 'pos']] corpus = df['word'].to_list() corpus = corpus[5000:10000] # ä»åã¯ã¨ããããè¤åèª5000件ã§å®é¨
ç¶ãã¦Sudachiã§å½¢æ ç´ è§£æããé¢æ°ã¨ããã¼ã¯ã³ã®ãªã¹ããåãåã£ã¦2-gramãè¿ãé¢æ°ãç¨æãã¾ãã2-gramã¯Sudachiã®å½¢æ ç´ è§£æçµæã®ãã¼ã¯ã³ã®2-gramã«ãªã£ã¦ãã¾ããä¾ãã°ãã¢ã¬ã«ã®ã¼æ§ããã¾ç¹ãã¯Sudachiã§ãã¢ã¬ã«ã®ã¼/æ§/ããã¾ç¹ãã«åå²ãããã®ã§2-gramã¯ãã¢ã¬ã«ã®ã¼/æ§, æ§/ããã¾ç¹ãã«ãªãã¾ãã
def tokenize(text: str): return [str(m.surface()) for m in tokenizer_obj.tokenize(text, mode) ] def generate_ngrams(tokens: List[str], n_gram=2) -> List[str]: ngrams = zip(*[tokens[i:] for i in range(n_gram)]) return [ngram for ngram in ngrams]
ããã§ä»åã®LLRã®å¤ãè¿ãã¿ã¼ã²ããã¨ãªãå»çç¨èªè¾æ¸ã®2-gramã®ãªã¹ããä½æãã¦ããã¾ãããããLLRã§ã¹ã³ã¢ãç®åºãã対象ã®ãªã¹ãã«ãªãã¾ãã
target_tokens = [ tokenize(str(c)) for c in corpus ] target_bigram = [ n for ts in target_tokens for n in generate_ngrams(ts)]
次ã«LLRãè¨ç®ããã¯ã©ã¹ãå®è£
ãã¾ããåæåæã«æ¸¡ãããããã¹ãã®ãªã¹ãããå
±èµ·æ°ãåå¾ãã¦DataFrameã«ãã¦ããã¾ãããã®å
±èµ·æ°ã®ãã¼ã¿ããcalculate
ã¡ã½ããã§LLRãè¨ç®ãã¾ãã
def f(v: int) -> float: if v == 0: return 0 return v*math.log(v) class LLR(): def __init__(self, txt_list: List[str]) -> None: tokens_list = [tokenize(str(txt)) for txt in txt_list] ngram = [ n for ts in tokens_list for n in generate_ngrams(ts)] cnt_pairs = Counter(ngram) n_1, n_2, freq = [], [], [] for (bigram1, bigram2), count in cnt_pairs.items(): n_1.append(bigram1) n_2.append(bigram2) freq.append(count) self.df = pd.DataFrame({'before': n_1, 'after': n_2, 'freq': freq}) def get_corpus(self) -> Dict: return self.df def calculate(self, x,y: str) -> float: A = self.df[(self.df['before']==x) & (self.df['after']==y)]['freq'].sum() B = self.df[(self.df['before']==x) & ~(self.df['after']==y)]['freq'].sum() D = self.df[~(self.df['before']==x) & (self.df['after']==y)]['freq'].sum() E = self.df[~(self.df['before']==x) & ~(self.df['after']==y)]['freq'].sum() C = A+B F = D+E G = A+D H = B+E I = G+H return 2*( f(A) + f(B) + f(D) + f(E) + f(I) - f(C) - f(F) - f(G) - f(H))
ããã§LLRãè¨ç®ããæºåãã§ãã¾ãããæ©éå®è¡ãã¦ã¿ã¾ãã
llr = LLR(corpus) llr_scores = {n: llr.calculate(*n.split(' ')) for n in set(target_bigram)} sorted(llr_scores.items(), key=lambda x:x[1], reverse=True)[:20]
ä¸ã¯LLRä¸ä½20ã表示ãããã®ã§ãã
[('çå 群', 708.9854464677628), ('ã¢ãã¬ã¹ è ±', 260.94084364152513), ('ã¢ã¬ã«ã®ã¼ æ§', 178.1249067739409), ('æ°ç®¡ æ¯', 150.8144970087742), ('ã¢ãã é ¸', 145.14973750742502), ('ã¦ã¤ã«ã¹ æ§', 127.40252258449618), ('ã¢ã«ã³ã¼ã« æ§', 119.58341157592076), ('è¡ ç', 102.19222720817197), ('å容 ä½', 100.87217141050496), ('ã¨ãã¯ã¹ ç·', 92.2298395754915), ('åº è»¢ç§»', 89.86543322118814), ('ä¸ é©å', 85.4975636832678), ('å¡©é ¸ å¡©', 84.39067255800182), ('ã¤ã³ãã«ã¨ã³ã¶ è', 84.24880956078414), ('èé« ç', 84.16009997777292), ('é ¸ å¡©', 80.97895242991217), ('ã¤ã³ã¹ ããã³', 79.75638761358277), ('æ°´å ç©', 77.77895879908465), ('ã¢ã«ããã¤ãã¼ å', 67.24952941091033), ('ææ ç', 65.61721853335621)]
ä¸ã®çµæããæ¤ç´¢æã«è¤åèªã¨ãã¦ç»é²ãããã¨å°ãåèªã確èªã§ãã¾ããä¾ãã°ãå容ä½ãããä½ãã§ããããããªãããã«ãå容ä½ããæå°åä½ã¨ãã¦è¾æ¸ã«ç»é²ããã¨ããå¤æãã§ãã¾ãããã®ã»ãã«ããçå/群ããã¤ã³ã¹/ããã³ããªã©è¤åèªã¨ãã¦åå²ããã¹ãã§ã¯ãªãåèªãçºè¦ã§ãã¾ãããç¨éã«åããã¦LLRã®é¾å¤ã決ãã¦è¤åèªåå²ã決ããã°è¯ãè¾æ¸ãä½ãããã§ãã
ä¸æ¹ã§ãã¦ã¤ã«ã¹/æ§ããã¢ã«ããã¤ãã¼/åããªã©ãæ¤ç´¢ã®ããã«åå²ãã¦indexãã¦ãããã2-gramãå«ã¾ãã¦ãã¾ã£ã¦ãã¾ããããã¯è¾æ¸ã ããã³ã¼ãã¹ã¨ãã¦å©ç¨ãã¦ããçºãå®éã®æ¤ç´¢ç¨éã«ç¹åã§ããªãã£ãçµæã ã¨èãããã¨ãã§ãã¾ãã
ã¯ã¨ãªãã°ãå«ããLLR
å ã»ã©ã®ãè¾æ¸ã ããã³ã¼ãã¹ã¨ãã¦å©ç¨ãã¦ããçºãå®éã®æ¤ç´¢ç¨éã«ç¹åã§ããªãã£ããã¨ãã仮説ãåãã¦ãæ¤ç´¢ãã°ãã¼ã¿ãå©ç¨ãã¦ãå®éã®æ¤ç´¢ã¯ã¨ãªã®å ±èµ·æ å ±ãèæ ®ãã¦LLRãè¨ç®ãã¦ã¿ã¾ããããã§ã¦ã¼ã¶ã¼ãå ¥åãããã°ã®ç¹å¾´ãå½¢ã«ãªãã®ã§ããæ¤ç´¢ç¹åã®çµæãå¾ããã¨ãã§ãããã§ãã
ã¾ãã¯ãã°ãã¼ã¿ã®åå¾ã¨æ´å½¢ã§ããå®é¨ã§ã¯å¼ç¤¾ãµã¼ãã¹AskDoctorsã®æ¤ç´¢ã¯ã¨ãªãã°ãã¼ã¿1ã¶æåãå©ç¨ãã¾ãã
# log data ãä½ãããç´ æµãªæ¹æ³ã§èªã¿è¾¼ã¿ df = pd.read_pickle('../resources/askd-log.pkl') queries = set(df['query'].apply(lambda x: x.replace('\u3000', ' ') if x is not None else None).dropna().to_list()[:100000])
corpus
ã«queries
ãmergeãã¦LLRãåãã¦ã¿ã¾ãã
corpus.extend(queries) llr = LLR(corpus) lr_scores = {n: llr.calculate(*n.split(' ')) for n in set(target_bigram)} sorted(llr_scores.items(), key=lambda x:x[1], reverse=True)[:20]
çµæã¯ä¸è¨ã«ãªãã¾ãã
[('ç ã¿', 230244.12042105198), ('çå 群', 62833.73194822669), ('ã¯ã¯ãã³ æ¥ç¨®', 44557.57735911012), ('èªå¾ ç¥çµ', 25344.664280727506), ('ç³å°¿ ç ', 24263.850860863924), ('å¾éº ç', 23335.373733341694), ('ãªã³ã ç¯', 20688.205953404307), ('äºé² æ¥ç¨®', 20032.058486014605), ('çµ±å 失調', 17938.972710222006), ('è¶ è²', 17011.504313260317), ('失調 ç', 16543.08399012685), ('æç ç©è³ª', 16477.49778163433), ('ç· å é', 15988.700599074364), ('æ°ç®¡ æ¯', 15578.936073839664), ('ç³ç° å', 15196.354923009872), ('ç° å½¢æ', 15081.088995113969), ('è¡ å°æ¿', 14301.756585016847), ('è³ æ¢å¡', 13817.224607855082), ('æ§ é£é', 13459.363096505404), ('é£é ç', 13029.133651405573)]
ã¯ã¨ãªã®ãã¼ã¿ãå ¥ã£ããã¨ã§ComeJisyoã ãã§ã¯å ±èµ·ãã¼ã¿ãå°ãªãã£ãããã«åºã¦ããªãã£ãè¤åèªãæãããã¨ãã§ãã¾ããã
æåã®çµæã¨æ¯ã¹ã¦ãããæ§ãã¨ããåèªãä¸ä½ããæ¶ãã¾ããããã¦ã¤ã«ã¹æ§ããªã©ã¯ã¯ã¨ãªãã¦ã¤ã«ã¹ãã§ãããããã¦ã»ããã®ã§ãã®çµæã¯æ¤ç´¢ã«ã¨ã£ã¦ã¯å¬ããçµæã§ãã
ä¸æ¹ã§ãã¯ã¯ãã³ æ¥ç¨®ãã«é¢ãã¦ã¯è¤åèªã¨ãã¦ç»é²ããã¨ãã¯ã¯ãã³æ¥ç¨®ãã«ã¯ã¨ãªãã¯ã¯ãã³ãã§ãããããªãã®ã§ããã¯è¯ããªãçµæã§ããæ¤ç´¢ã¯ã¨ãªãã°ã«æ¤ç´¢æã«åå²ãããè¤åèªã§ãããã¯ã¯ãã³æ¥ç¨®ããå¤ãåºç¾ããããã«ãã®ãããªçµæã«ãªã£ãããã§ãã
ã¡ãªã¿ã«ã¹ã³ã¢ã1çªé«ããçã¿ãã«é¢ãã¦ã¯sudachiã§ä¸è¨ã®ãããªå½¢æ ç´ è§£æãããã¦ãã¾ããã
echo 'çã¿' | sudachipy -m A -s core ç 形容è©,ä¸è¬,*,*,形容è©,èªå¹¹-ä¸è¬ çã ã¿ æ¥å°¾è¾,åè©ç,ä¸è¬,*,*,* å³ EOS
ãç ã¿ãã®ãçãã¯æ£è¦åããã¨ãçããã«ã§ããã®ã§ãçã¿ãã§ãçããããããã§ãã¾ãããã®çºãçã¿ãã§ï¼ã¤ã®åèªã¨ãããã¯æ©ã¿ã©ããã§ãã
çµè«ãã¯ã¨ãªãå«ãã çµæã®æ¹ãè¯ãããã«è¦ãã¾ãããã¾ã ã¾ã 課é¡ãããã¾ãã
è¤åèªã¯ç¡éã«åå¨ãããããã¼ãããè¤åèªãï¼ã¤ï¼ã¤åå²ãã¹ãããèããã¨æéããããã¾ããããã®ææ³ã§è¤åèªåè£ãçµã£ã¦äººéãç®ã§ç¢ºèªããã¨ããæ¹æ³ã§è¯ãè¾æ¸ãä½ãããã§ããã¯ã¨ãªã«å¯¾ãã¦ã¯ãªãã¯ããããã¥ã¡ã³ãã®ã¿ã¤ãã«ãããã«ãã¼ã¿ã¨ãã¦å©ç¨ããããããã¥ã¡ã³ãå ¨ä½ãããç¨åº¦ã©ã³ãã ãµã³ããªã³ã°ãã¦å©ç¨ãããªã©ãã¦ãããç¨éã«ç¹åããLLRè¨ç®ãã§ããã¨èãã¦ãã¾ãã
ã¾ã¨ã
LLRã®ã¹ã³ã¢ãåºããã®ã§é¾å¤ã決ãã¦ãè¤åèªã®åå²ããããããªãããããç¨åº¦èªåã§æ±ºãããã¨ãã§ãããã§ããä¸æ¹ã§ãå ±èµ·æ å ±ã®ã¿ãå©ç¨ãã¦ããã®ã§ãå®å ¨ã«æ¤ç´¢ç¹åã®è¤åèªã«ãªã£ã¦ãããã©ããã¯äººãçµæãè¦ã¦å¤æããå¿ è¦ãããããã§ãã
ã¾ããããã§ããããLexical Search(æååãã¼ã¯ã³ãã¼ã¹ã§ãããããããå¤å®ããæ¹æ³)ã®éçãæãã¦ããã®ã§ãããã¾ã§è¾æ¸ããã¥ã¼ãã³ã°ãå§ãããSemanticãªæ¤ç´¢ææ³ãæ¤è¨ãã¦ããã¹ãã§ãããã
We're hiring !!!
ã¨ã ã¹ãªã¼ã§ã¯æ¤ç´¢&æ¨è¦åºç¤ã®éçº&æ¹åãéãã¦å»çãåé²ãããã¨ã³ã¸ãã¢ãåéãã¦ãã¾ãï¼ ç¤¾å ã§ã¯æ¥ã æ¤ç´¢ãæ¨è¦ã«ã¤ãã¦ã®è°è«ãæ´»çºã«è¡ããã¦ãã¾ãã
ãã¡ãã£ã¨è©±ãèãã¦ã¿ãããããã¨ãã人ã¯ãã¡ãããï¼ jobs.m3.com