タグ

ブックマーク / takeda25.hatenablog.jp (13)

  • ニューラルかな漢字変換の細かいツッコみどころ - アスペ日記

    ニューラルかな漢字変換という記事へのツッコミです。 いや、ニューラル部分はいいんですよ。 ぼくはやってないから。 ツッコみどころは、ごく細かいところです。 注釈の、「かな漢字変換はN=3以上にしても精度が上がらないことが実験により確かめられています。詳しくは私の論文(リンク)を参照ください。(ドヤァ 」という箇所です。 それ、BCCWJのコアデータだけ使った場合ですよね。 ぼくは以前、N-gram かな漢字変換を作って公開したことがあります。 これは、京都大学で公開している言語モデル配布ページの、BCCWJ全体を使ったものです。 実装はhttps://github.com/hiroshi-manabe/ngram-converter-cppにあります。 http://vocrf.net/test/ime.htmlで、4-gram かな漢字変換をテストできます。 (PCで、PCのIMEを切っ

    ニューラルかな漢字変換の細かいツッコみどころ - アスペ日記
  • 機械翻訳と意味 - アスペ日記

    ここ最近、Google翻訳がリニューアルされ、性能が向上したという話が流れてきたので、さっそく試してみた。 ぼくが真っ先に試したのは、「母は、父が誕生日を忘れたので、怒っている。」だ。 なぜこの文が気にかかっていたかは後述する。 結果は次の通り。 "My mother is angry because my father forgot her birthday." すばらしい。 では、「母は、父が鞄を忘れたので、怒っている。」はどうだろうか。 "My mother is angry because my father forgot his bag." 完璧だ! 「誕生日を忘れた」の場合は「母の誕生日」と解釈し、「鞄を忘れた」の場合は「父の鞄」と解釈する。 これこそ、利用者が翻訳に求めるものじゃないだろうか。 しかし、ここまでだった。 次にぼくは、「父」と「母」を入れ替え、「父は、母が誕生日

    機械翻訳と意味 - アスペ日記
  • C言語プログラミングの覚え書き(改訳) - アスペ日記

    原文: Notes on Programming in C Rob Pike 1989年2月21日 Copyright (C) 2003, Lucent Technologies Inc. and others. All Rights Reserved. Lucent Public License Version 1.02 前書き KernighanとPlaugerによる“The Elements of Programming Style” (「プログラム書法」木村泉訳)は重要で影響力のあるです。このにはそれだけの価値があります。しかし、その中の簡潔なルールが、来意図されたような哲学の簡潔な表現としてではなく、よいスタイルのレシピとして受け取られているように私は時々感じます。このが変数名は意味を持つようにつけられるべきだと言うなら、名前が使い方を説明するちょっとしたエッセイのような

    C言語プログラミングの覚え書き(改訳) - アスペ日記
  • darts-clone の Java 移植 - アスペ日記

    矢田さんのdarts-cloneをJavaに単純に移植したので、GitHubに上げました。 https://github.com/hiroshi-manabe/darts-clone-java darts-clone については、矢田さんの日記に詳しい解説があります。 これを移植したときは、仕事で使えるかと思ってやってみたのですが、結局そのときは容量の小ささを重視して takawitter さんのtrie4jを改造して使うことになりました。 せっかくなので置いておきます。 これはいろいろな事情があり、かなり Java 的でないものになっています。 その背景には、上記の trie4j の存在もあります。 trie4j はダブル配列も含むため、通常であればそちらを使うのが簡単でいいと思いますが、darts-clone はいろいろと変態的な工夫(1ノードあたり 4 バイトしか消費しないとか、値が

    darts-clone の Java 移植 - アスペ日記
  • いつからその方法で偏りのない乱数が得られると錯覚していた? - アスペ日記

    私はつい最近まで勘違いしていました。 ここのページに書いてあるような方法で、一様分布する整数が得られると。 int random(int n) { return (int)(( rand() / (RAND_MAX + 1.0) ) * n); } この方法、一見すると実に一様分布が得られそうに見えるんですよね。 どういう思考回路を通っているかというのを自己分析すると、次のような感じです。 1. rand() では 0〜RAND_MAX のランダムな整数が得られる。 2. それを RAND_MAX + 1 で割ると、[0, 1) に一様分布する実数が得られる。 3. [0, 1) の一様な実数を n 倍して小数点以下を切り捨てたら、0 から n-1 に一様分布する整数が得られる。 これの罠なところは、1 と(特に)3 が正しいというところだと思います。 ただ、2 がダウト。 思いっきりダウ

    いつからその方法で偏りのない乱数が得られると錯覚していた? - アスペ日記
  • JavaScript で有効数字 28桁の Decimal 型を書いた - アスペ日記

    JavaScript の Decimal 型を書いて、GitHub と npm で公開した。 https://github.com/hiroshi-manabe/JSDecimal https://npmjs.org/package/jsdecimal C# (っていうか .NET)には Decimal型 というのがあるらしい。 十進数で 28〜29桁(なんだその「28〜29桁」ってのは…後述)の精度を保証するとのこと。 それで、お金の絡む計算にはよく使われるそうだ。 で、人から聞いた話だけど、そういう計算をサーバ側でしていたのをクライアント側でもしたいということがあるようだ。 Ajax でも使って、サーバ側で計算させたものを取ってくればいいと思うのだが、そうもいかないこともあるらしい。 何に使うかというと、ちゃんとした計算はサーバでやるものの、プレビューみたいなものをユーザに見せたいとか

    JavaScript で有効数字 28桁の Decimal 型を書いた - アスペ日記
  • ウェーブレット行列の省メモリ構築方法 - アスペ日記

    ウェーブレット行列の構築方法について。 前に書いた記事とは違って、「ウェーブレット行列大好き!」って人*1以外が読んでもあんまり益がない記事だということをあらかじめ書いておく。 内容としては、相変わらず中学生以上の知識が必要ということはないけれど。 上の記事で書いたように、ウェーブレット行列は 2進数の基数ソートと同じような感じで構築できる。 で、基数ソートをするには、元の配列と同じだけの領域が必要になる。 だが、ウェーブレット行列のように各段階でのビット列だけが必要であるなら、その領域は必要ない。 ウェーブレット行列でも、ウェーブレット木のノードのようなものを持っておくことで、配列長のオーダーでなく、文字の種類のオーダー(一般的に配列長よりずっと小さい)だけの記憶領域で構築できる。 ぼくのウェーブレット行列ライブラリである wavelet-matrix-cpp や、 id:echizen

    ウェーブレット行列の省メモリ構築方法 - アスペ日記
  • 中学生にもわかるウェーブレット行列 - アスペ日記

    id:echizen_tm さんの記事「ウェーブレット木の効率的で簡単な実装 "The Wavelet Matrix"」から始まったウェーブレット行列ブームから半年以上が過ぎ、すでに枯れた技術として確立されつつある感があります。 …嘘です。 日以外ではあんまり来ていません。 理由としては、やはりアルファベット圏では単語境界が明確であるため、こちらの記事で書かれているような「キーワード分割の難易度」といったことがあまり問題にならないということがあるかもしれません。 まあ、そういうわけで局所的に来ているウェーブレット行列ですが、日語をはじめとする単語境界のない言語圏にとっては重要なネタであると思うため、解説記事を書き直して*1みようと思います。 ウェーブレット行列でできること 主となる操作は、文字列に対する 定数時間の rank() と select()*2 です。 rank() は、「文

  • 簡潔データ構造 LOUDS の解説(全12回、練習問題付き)

    日本語入力を支える技術」(通称「徳永」)や「高速文字列解析の世界」(通称「岡野原」)で紹介されている LOUDS というデータ構造を、12回に分けて解説しました。 友達に教える時に使ったもので、練習問題付きです。 実際に紙に書いてやってみるとわかりやすいと思います。 詳解 LOUDS (1) LOUDS とは 詳解 LOUDS (2) ビット列を作ってみる 詳解 LOUDS (3) 0番ノード 詳解 LOUDS (4) ビットの意味 詳解 LOUDS (5) 木構造の復元 詳解 LOUDS (6) インデックスでノードを表す 詳解 LOUDS (7) ノード番号からインデックスを得る 詳解 LOUDS (8) インデックスからノード番号を得る 詳解 LOUDS (9) 子ノードから親ノード 詳解 LOUDS (10) 親ノードから子ノード 詳解 LOUDS (11) 木の検索 詳解

    簡潔データ構造 LOUDS の解説(全12回、練習問題付き)
  • 情報系修士にもわかるLOUDS - アスペ日記

    一回でわかりやすく書くのは難しいので、簡潔データ構造 LOUDS の解説(全12回、練習問題付き)というシリーズにまとめました。 (2014/01/26) 古い内容を削除しました。

    情報系修士にもわかるLOUDS - アスペ日記
  • 情報系修士にもわかるダブル配列 - アスペ日記

    最近話題の「日本語入力を支える技術」を途中まで読んだ。 3章がものすごく気合いが入っている。 trie(トライ)というデータ構造の2つの実装、「ダブル配列」と「LOUDS」について詳しく説明がされている。 ダブル配列については、ぼくは以前論文を読んで勉強しようとしたのだが、その時は難しくてあきらめた覚えがある。しかし、このの説明を読むことで理解ができた。 ありがたい。 感銘を受けたので、このを教材に友達と2人勉強会をした。 この2人勉強会というのは、ぼくが復習を兼ねて友達に教えるというのがだいたいのスタイル。 しかし、いざやってみるといろいろと難しい。 次のようなところでひっかかるようだ。 例のサイズが小さく、イメージを喚起するのが難しい。 最初の図のノード番号と、最終的なダブル配列上の位置が異なるため、混乱する。 単語終端について言及がないので、どのノードが単語を表しているかがわから

    情報系修士にもわかるダブル配列 - アスペ日記
  • 可変次数 N-gram デコードのアルゴリズム - アスペ日記

    前に書いた N-gram 漢字-かな変換 - アスペ日記 のアルゴリズムについて。 かなり縦に長いエントリになると思う。途中までは一般的な日語自然言語処理にかかわること。 例として、「かれがくるまでまつ」というひらがなの文をデコードして、対応する漢字かな混じり文にすることを考える。 こういう時に使われるのが「ラティス構造」。こういうやつ↓ (この図は一回しか出てきません。ちなみにこのために Keynote 買ったようなもの) それぞれのノードで、そこに入ってくるエッジの中で一番確率が高いものとその確率を覚えていくことで、動的計画法によって最適なパスを導くことができる。 これをプログラム上でどう実現するか。 まず、共通接頭辞検索というものを使う。 これは、あるキーを渡すと、そのキーに前から一致するようなキーを持つ候補を列挙してくれるというもの。 例えば、「くるまで」をキーとして使うと、「く

    可変次数 N-gram デコードのアルゴリズム - アスペ日記
  • 手抜き日中判別 - アスペ日記

    Twitter 上で、 id:showyou さんがログデータの日中言語判別をしたいという話をしていたので、それについて。 まず前提として、文字だけ見ても日語と簡体字中国語(繁体字はもっと面倒だけど、ここではいったん棚上げ)を 100%判別することはできない。 というのは、簡体字中国語の文章であっても必ずしも簡体字を含むわけではないので。 “真的?”(当に?) “恭喜恭喜!”(おめでとう!) これらは典型的な例だが、実際はもっと長い簡体字を含まない文章でも実は中国語ということがあり得る。 また、「カナがあれば日語」という簡単な方法もあるが、全部漢字だから中国語というわけでもない。 「最低!」 「関西電気保安協会」等。 文字ベースで判別できないとなると、精度良く判別するならライブラリを使うのが一番。 Language Detection Library for Javaとか。 ただ、こ

    手抜き日中判別 - アスペ日記
    manabou
    manabou 2011/02/01
    言語判定
  • 1