astamuse Lab

astamuse Labとは、アスタミューゼのエンジニアとデザイナーのブログです。アスタミューゼの事業・サービスを支えている知識と舞台裏の今を発信しています。

デザインの良し悪しを語るのに必要な「分解」について【書体編】

前置き(長い)

先日、というか結構まえの話になるのですが、とあるSNSを閲覧していたところ「明朝体で喋る人が好きなのだけれど大体の人がゴシック体で会話をしておr…(以下省略)」といった内容を発信している方をお見かけました。
こちらの投稿は「その感じ、とてもよくわかります」と言う分かる派と「明朝体やゴシック体といったものは文字として表されるものにも関わらず、それを用いて喋るとは一体どういうことなのか?」と言った分からない派が発生し、書体について様々な意見が投じられていたようです。
しかし「分かる派」の方々でも具体的な説明を求められると、「そいつはなかなか難しい」という様子で双方の理解は平行線を辿り、霧散、といった具合です。

筆者はいちおうデザイン的なそれを生業としており、先の投稿にあったような「明朝体」「ゴシック体」という類のものを意識する時間が非デザイナーの人よりは相対的に多いような気が何となく、しなくもないかな、と感じています。 そういった事情もあり「明朝体で話す感じ」については一定の理解が可能であるのと同時に、「意味がわからない」とおっしゃる方の言い分も確かによく分かります。 なぜならこういったやり取りは書体に限ったことではなく、主にデザイン界隈、すなわち「意匠」について語られる時によく見かける風景で、昨日今日に始まったことではないからです。

例えて言うなら、ある意匠(デザイン)を見て「うわぁ、これめっちゃイケてる、最先端、それでいてダウナー」的な感想を持ったとしても他の人が「全くそうは思わない、なぜそう感じるのか説明しろ」と言われて具体的な説明ができなければ先ほどの事例と同じことで、お互いの意見はいつまでたっても平行線、一生お互いの良いと思った素敵なデザインについて理解しあえないままで終わることになり、とても悲しい、的なことになりかねない。

とまあ極端な例ですけど、でもデザインが醸し出すイメージ・印象を具体的な言葉に変換して伝えることはそんなに難解なことなのか?といったら案外そうでもないハズです。 それはデザインされたものを「分解する」ことで誰でも簡単にできることだと思います。

ひっじょーに長くなりましたが、取りあえずそういうことで今回はデザインを「分解する」的なものが何なのかについて、「書体」を例に考えていきたいと思います。

基礎を知る

まず、はじめに分解しようと思う要素の基礎を確認する必要があります。 筆者自身がよく行う事ですが、既に知っている事であっても分解していこうと要素については調べ直すようにしています。 知っていると思っていた事柄も過大解釈していたり、思い違いをしていたり、偏った見方をしていたり、という場合も決してゼロではありません。 基本的には自分の知識や記憶をあてにしない、というスタンスでいることが大事なことかもしれません。

ということで、まずは書体の基本をざっと確認していきます。

書体の基本

書体とフォント

書体の英訳がフォントと考えている人もいるため混同されがちですが、厳密には違います。

書体:統一されたデザインを持つ文字の集まり
フォント:書体をディスプレイ表示や印刷などで使えるようにデータ化したもの

このような違いがあるものの実際には「書体」のことを指すときにも「フォント」と言いがちですし、仕事以外の場ではその違いを意識して使うことはあまりないかもしれません。 ちなみに書体の英訳として相当するのはtypefaceらしいです。

和文書体と欧文書体

そして「書体」と一口に言っても世界には数え切れないほどの、ありとあらゆる種類が存在しています。 すべてを確認するのはこの場ではムリな気がする。 なので理解しやすいように大きく2つに分けてみるとまずは「和文書体」と「欧文書体」に大別することができます。 読んで字のごとくですが、

  • 和文書体:日本語(ひらがな/カタカナ/漢字/その他)をデザインした書体

  • 欧文書体:アルファベット表記の文字をデザインした書体

簡単に説明するとこのようになります。

明朝体とゴシック体

さらに和文書体も大きく2つの種類に分けることができるのですが、それが先述した「明朝体」と「ゴシック体」です。 これらは馴染みがある書体ですよね。 それぞれの特徴は

  • 明朝体:縦の線は太く、横の線は細くデザインされており、筆で書いたような「うろこ(※)」「はね」「はらい」などもデザインされた書体

  • ゴシック体:線の太さがほぼ均等で直線的にデザインされた書体

(※)うろこ:線の右端、曲がり角の右肩につけられる三角形のこと。毛筆で書いた文字にある「押さえ」。

f:id:astamuse:20170920112706p:plain

セリフ体とサンセリフ体

また、欧文書体も「セリフ体」と「サンセリフ体」の2つに大別できます。

  • セリフ体:縦線が細く、セリフ(※)をもつ書体。欧文書体の中でもっともスタンダード。

  • サンセリフ体:すべての線の太さがほぼ均等で、セリフをもたない書体

(※)セリフ:明朝体でいう「うろこ」と同じ(ような)もの

f:id:astamuse:20170920113005p:plain

こうやって比べてみると、和文書体も欧文書体も同じような大別の仕方で、「あしらい」なども非常に似ていることがわかります。

と、ここまでの解説は書籍やwebなどにももっと詳しく解説されていますのでもっと知りたい方は自力で調べて下さい。

「書体」とはいったい何なのか(「分解」的なことの実践)

それでは「書体」がどういったものか大まかにわかったところで、実践です。

書体」とは上記の『書体の基本』にも書いたように【統一されたデザインを持つ文字の集まり】です。 ではその「文字」とは何か? 端的に言ってしまえば「言葉/言語」を表す「図形」と言い換えられます。

ではその「図形」は何なのか? それは「点と線」で構成された形です。

つまり、人はある特定の「点と線」の重なりを「文字」と認識しているわけです。

ではここで、2つの線を見比べてください。

f:id:astamuse:20170920113028p:plain

「力強い線」はどちらで「繊細な線」はどちらでしょう?
通常、左の線を力強く、右の線を繊細と感じるのではないでしょうか。
このように、人は「線」の太さ・強弱に対して共通する印象・イメージを持っていると言えます。

では

  • 「線(と点)」の重なりを「文字」を認識していて

  • その「線」の強弱に特定の共通するイメージを持っている

ということは 持ってもらいたい印象・イメージを、線に強弱をつけることによってコントロールされた「文字」が「書体」ということになります。

便宜的に線の強弱と書きましたが、もちろんそれだけではありません。 「文字」を織り成す線には直線もあれば曲線もあり、また途中で曲げて角をつけることもあれば、その角度の付け方にもイメージが宿ります。
つまりは人が共通で持ち得る「あしらい」に対するイメージを積み重ねることよって、「書体」に「雰囲気」を持たせているのです。

例:ゴシック体

上記のことを前提として、「ゴシック体」の持っている雰囲気的なそれを例として書き出しておきたいと思います。

ゴシック体のイメージ :強い、重さ、頑健 f:id:astamuse:20170920115656p:plain なぜそういうイメージを持つか?:濃さは密度を連想させ、塗りの部分が多いため字が重く見える。また、角張っていてゴツゴツとしている所に男性的な印象を持つ。輪郭もはっきりとしているので、擬人化するとハキハキと大きな声でしゃべる男性が想像される。

(もう少し例を出しておきたいところですが、体力の限界なので終わります)

このように細かく分けて考えていくことで、「これめっちゃイケてる」と思った時に説明の手がかりになるはずです(多分)。

参考書籍:タイポグラフィの基本ルール-プロに学ぶ、一生枯れない永久不滅テクニック-[デザインラボ]

タイポグラフィの基本ルール -プロに学ぶ、一生枯れない永久不滅テクニック-[デザインラボ]

タイポグラフィの基本ルール -プロに学ぶ、一生枯れない永久不滅テクニック-[デザインラボ]

あと【書体編】と明記してありますが続きものというワケではないのでこれで終わるかもわからないなぁ…と 自分のプレッシャーにならない程度にゆるいペースでまとめて逝きたいです。

書体について教えてくれる人が居たら弊社にお越し下さいませ。

CoreNLP を使ってみる(1)

山縣です。

 

今回は 自然言語処理ツールである Stanford CoreNLPについて書きたいと思います。

Stanford CoreNLPとは

Stanford CoreNLP は自然言語処理ツールのひとつです。スタンフォード大学がオープンソース(GPL3) で公開しています。 英語、中国語など主要な言語をサポートしています。が残念ながら日本語は対応していません。

日本語以外の自然言語処理ツールについては先日、白木が Polyglot について記事を書いていましたが、こちらは Python 用です。私は Scala で書くことが多いので、Java/Scala で使えるものとして CoreNLP を使っています。

CoreNLP を使うには CLI として呼び出す方法、サーバとして起動して呼び出す方法、プログラムからライブラリとして使用する方法があります。

今回は CLI とサーバとして使う方法について解説したいと思います。

CLI として使ってみる

インストール

Windows10 の bash on windows 上にインストールしてみました。

CoreNLP は Java で作られていますのでJavaの実行環境が必要です。Java のバージョンは Java8 になります。

CoreNLPのインストールは、まずDownload | Stanford CoreNLP よりファイルをダウンロードします。

この記事を書いた時点でCoreNLPのバージョンは 3.8.0 です。

“Download CoreNLP 3.8.0” ボタンを押して、本体をダウンロードします。 ダウンロードした、stanford-corenlp-full-YYYY-MM-DD.zip を展開します。

$ unzip stanford-corenlp-full-2017-06-09.zip
$ cd stanford-corenlp-full-2017-06-09

次に各言語固有の モデルデータ(JARファイル) をダウンロードします。今回は英語を使います。本体と同じページに各言語用のモデルデータがあるので、そちらから"English" を選び英語用のモデルデータ(stanford-english-corenlp-2017-06-09-models.jar) をダウンロードして本体のディレクトリに置きます。

なお英語で使用する場合は、実際には追加のモデルデータを取得しなくても大方の機能が動くようです。本体に含まれる stanford-corenlp-3.8.0-models.jar に基本的なモデルデータが含まれているようです。

インタラクティブに使う

とりあえずこれでセットアップが完了したので、試しに実行してみます。 付属している corenlp.sh を使ってCoreNLP を起動します。

$ ./corenlp.sh -annotators tokenize,ssplit,pos,lemma,ner
java -mx5g -cp "./*" edu.stanford.nlp.pipeline.StanfordCoreNLP -annotators tokenize,ssplit,pos,lemma,ner
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
...

Entering interactive shell. Type q RETURN or EOF to quit.
NLP>

入力ファイルを指定しなかった場合、インタラクティブシェルが立ち上がるので、ここに処理したい文章を入れると結果が返ります。

NLP> How can I get to Tokyo station? I need to get on the bullet train at that station.

Sentence #1 (8 tokens):
How can I get to Tokyo station?
[Text=How CharacterOffsetBegin=0 CharacterOffsetEnd=3 PartOfSpeech=WRB Lemma=how NamedEntityTag=O]
[Text=can CharacterOffsetBegin=4 CharacterOffsetEnd=7 PartOfSpeech=MD Lemma=can NamedEntityTag=O]
[Text=I CharacterOffsetBegin=8 CharacterOffsetEnd=9 PartOfSpeech=PRP Lemma=I NamedEntityTag=O]
[Text=get CharacterOffsetBegin=10 CharacterOffsetEnd=13 PartOfSpeech=VB Lemma=get NamedEntityTag=O]
[Text=to CharacterOffsetBegin=14 CharacterOffsetEnd=16 PartOfSpeech=TO Lemma=to NamedEntityTag=O]
[Text=Tokyo CharacterOffsetBegin=17 CharacterOffsetEnd=22 PartOfSpeech=NNP Lemma=Tokyo NamedEntityTag=LOCATION]
[Text=station CharacterOffsetBegin=23 CharacterOffsetEnd=30 PartOfSpeech=NN Lemma=station NamedEntityTag=O]
[Text=? CharacterOffsetBegin=30 CharacterOffsetEnd=31 PartOfSpeech=. Lemma=? NamedEntityTag=O]
Sentence #2 (12 tokens):
I need to get on the bullet train at that station.
[Text=I CharacterOffsetBegin=32 CharacterOffsetEnd=33 PartOfSpeech=PRP Lemma=I NamedEntityTag=O]
[Text=need CharacterOffsetBegin=34 CharacterOffsetEnd=38 PartOfSpeech=VBP Lemma=need NamedEntityTag=O]
[Text=to CharacterOffsetBegin=39 CharacterOffsetEnd=41 PartOfSpeech=TO Lemma=to NamedEntityTag=O]
[Text=get CharacterOffsetBegin=42 CharacterOffsetEnd=45 PartOfSpeech=VB Lemma=get NamedEntityTag=O]
[Text=on CharacterOffsetBegin=46 CharacterOffsetEnd=48 PartOfSpeech=IN Lemma=on NamedEntityTag=O]
[Text=the CharacterOffsetBegin=49 CharacterOffsetEnd=52 PartOfSpeech=DT Lemma=the NamedEntityTag=O]
[Text=bullet CharacterOffsetBegin=53 CharacterOffsetEnd=59 PartOfSpeech=NN Lemma=bullet NamedEntityTag=O]
[Text=train CharacterOffsetBegin=60 CharacterOffsetEnd=65 PartOfSpeech=NN Lemma=train NamedEntityTag=O]
[Text=at CharacterOffsetBegin=66 CharacterOffsetEnd=68 PartOfSpeech=IN Lemma=at NamedEntityTag=O]
[Text=that CharacterOffsetBegin=69 CharacterOffsetEnd=73 PartOfSpeech=DT Lemma=that NamedEntityTag=O]
[Text=station CharacterOffsetBegin=74 CharacterOffsetEnd=81 PartOfSpeech=NN Lemma=station NamedEntityTag=O]
[Text=. CharacterOffsetBegin=81 CharacterOffsetEnd=82 PartOfSpeech=. Lemma=. NamedEntityTag=O]
NLP>

入力したテキストを二つのSentenceに分割したうえで、各トークンについての解析結果を表示しています。

上記の出力形式はデフォルトの ‘text’ というhuman readable なフォーマットになっています。

表示の意味はText がそのトークン、CharacterOffsetBegin/End がテキストの中での位置を、 PartOfSpeech が品詞を、Lemmaがレンマを NamedEntityTag が固有表現を表しています。

アノテータ

CoreNLPに処理させる機能(アノテータ)は立ち上げ時に -annotators オプションでカンマ区切りで指定しています。今回は “tokenize,ssplit,pos,lemma,ner” を指定しています。

tokenize はテキストをトークン(単語)に分ける処理を, ssplit はトークン群を文に分割する処理を、pos(part of speech) は品詞の判別、lemmaはレンマ化, ner(named entity recognition) は固有表現抽出を行います。

使用できるアノテータの一覧は Annotators | Stanford CoreNLP にあります。

またアノテータには依存関係があり、依存しているものを先に指定する必要があります。たとえば ssplit は tokenize に依存しているので tokenizeを先に(左に)指定する必要があります。また lemma は tokenize,ssplit,pos に依存しています。各アノテータの依存関係は Annotator dependencies | Stanford CoreNLP に記載されています。

posで出力されるタグ記号の一覧はこちらのタグ一覧が参考になるようです。

ner では、名称(PERSON, LOCATION, ORGANIZATION, MISC)、数字(MONEY, NUMBER, ORDINAL, PERCENT)、時間(DATE, TIME, DURATION, SET)を認識することができます。

Ieyasu Tokugawa was the founder of Edo shogunate. He lived to be 73 years old. He died on January 31,1543.

上記のテキストのNERを見ると以下のような結果になりました。 (見やすいように必要な情報だけに加工してあります)

Ieyasu PERSON
Tokugawa  PERSON
...
Edo O
shogunate O
...
73 DURATION
years DURATION
old DURATION
...
January DATE
31,1543 DATE

上記のように “Ieyasu Tokugawa” をPERSON, “73 years old” をDURATION, “January 31,1543” を DATE と認識できています。一方 “Edo shogunate” は認識できませんでした。

入力ファイルを指定する

先ほどまではインタラクティブにテキストを入力していましたが、 入力ファイルを指定することでバッチ的に処理をすることが可能です。

$ cat input.txt
Stanford University is located in California. It is a great university, founded in 1891.

$ ./corenlp.sh -annotators tokenize,ssplit,pos,lemma,ner -file ./input.txt

-file で入力ファイルを指定します。出力形式を指定しない場合 xml がデフォルトになります。

$ cat input.txt.xml
...
<root>
  <document>
    <sentences>
      <sentence id="1">
        <tokens>
          <token id="1">
            <word>Stanford</word>
            <lemma>Stanford</lemma>
            <CharacterOffsetBegin>0</CharacterOffsetBegin>
            <CharacterOffsetEnd>8</CharacterOffsetEnd>
            <POS>NNP</POS>
            <NER>ORGANIZATION</NER>
          </token>
          <token id="2">

出力ファイル名は <入力ファイル名>.xml になります。

-filelist オプションでファイルリストを指定することで複数のファイルを一括して処理することもできます。 CoreNLP CLI の起動は Java であることやモデルデータのロードに時間がかかるので多数のフィルを処理するときは -filelist で一括して処理したほうが効率的だと思います。

出力フォーマットを指定する

デフォルトの出力フォーマットを変更するには -outputFormat を指定します。 指定できるフォーマットは text, json, xml, conll, conllu, serialized です。指定するフォーマットによって出力ファイルの拡張子が変わります。 詳細は Output options で確認してください。

プロパティファイル

今まで corenlp.sh 実行時に引数でパラメータを指定していましたが、プロパティファイルを用意することでパラメータを指定することが出来ます。

$ cat my.properties
annotators = tokenize,ssplit,pos,lemma,ner,parse,mention,coref
outputExtension = .output
outputFormat = text
file = test.txt

$ cat test.txt
I bought an apple at the supermaket.
I am going to eat it later.

上記のようなプロパティファイルと入力ファイルを用意して実行します。

$ ./corenlp.sh -props ./my.properties
java -mx5g -cp "./*" edu.stanford.nlp.pipeline.StanfordCoreNLP -props ./my.properties
[main] INFO edu.stanford.nlp.pipeline.StanfordCoreNLP - Adding annotator tokenize
...

$ cat test.txt.output
Sentence #1 (8 tokens):
I bought an apple at the supermaket.
[Text=I CharacterOffsetBegin=0 CharacterOffsetEnd=1 PartOfSpeech=PRP Lemma=I NamedEntityTag=O]
...
Coreference set:
        (2,6,[6,7]) -> (1,4,[3,5]), that is: "it" -> "an apple"
Coreference set:
        (2,1,[1,2]) -> (1,1,[1,2]), that is: "I" -> "I"

test.txt.output に解析結果が出力されました。coref アノテータを指定したので共参照の解析結果が表示され、 2つ目の文の ‘it’ が 1つ目の文の ‘an apple’ を指していることなどが解析できています。

なお、プロパティファイルを指定しなかった場合、CoreNLP はclasspath 上の StanfordCoreNLP.properties を、それが無ければ .jar に含まれるedu/stanford/nlp/pipeline/StanfordCoreNLP.properties を読み込んでいます。

逆に言えば -props で指定してしまうとデフォルトの StanfordCoreNLP.properties が読み込まれなくなります。 このjar に組み込まれている edu/stanford/nlp/pipeline/StanfordCoreNLP.properties の中を確認してみると

$ less edu/stanford/nlp/pipeline/StanfordCoreNLP.properties
annotators = tokenize, ssplit, pos, lemma, ner, depparse, mention, coref

tokenize.language = en
...
#pos.model = /u/nlp/data/pos-tagger/wsj3t0-18-left3words/left3words-distsim-wsj-0-18.tagger
...
#ner.model = ...
#ner.model.3class = /u/nlp/data/ner/goodClassifiers/all.3class.distsim.crf.ser.gz

上記のように annotators と tokenize.language 以外のモデルデータの指定などはすべてコメントになっており、デフォルト値が呼ばれているだけだとわかります。 したがって -props で自前のプロパティファイルでモデルデータの指定をしなくても挙動は変わりません。

一方他の言語の場合は違ってきます。例えばドイツ語の言語モデルに含まれている StanfordCoreNLP-german.properties にはドイツ語の解析に必要なモデルデータの指定等が記載されています。

$ cat StanfordCoreNLP-german.properties
annotators = tokenize, ssplit, pos, ner, parse

tokenize.language = de

pos.model = edu/stanford/nlp/models/pos-tagger/german/german-hgc.tagger

ner.model = edu/stanford/nlp/models/ner/german.conll.hgc_175m_600.crf.ser.gz
ner.applyNumericClassifiers = false
ner.useSUTime = false

parse.model = edu/stanford/nlp/models/lexparser/germanFactored.ser.gz
...

したがって英語以外の言語で自前のプロパティファイルを使いたい場合はモデルデータに含まれるデフォルトのプロパティファイルを抽出して、そこに記載していく必要があります。

サーバーとして使用

CoreNLP はサーバとして起動して Web API 経由で使用することもできます。

java -mx5g -cp "*" edu.stanford.nlp.pipeline.StanfordCoreNLPServer
[main] INFO CoreNLP - --- StanfordCoreNLPServer#main() called ---
...
[main] INFO CoreNLP -     Threads: 8
[main] INFO CoreNLP - Starting server...
[main] INFO CoreNLP - StanfordCoreNLPServer listening at /0:0:0:0:0:0:0:0:9000

上記のように tcp 9000 でサーバが立ち上がります。

以下のようなクエリを投げることで、CLI と同じようにテキストの解析が可能です。

$ wget --post-data 'I bought an apple at the supermaket. I am going to eat it later.' 'localhost:9000/?properties={"annotators":"tokenize,ssp
lit,pos,lemma,ner,parse,mention,coref","outputFormat":"text"}' -O -
...
             Sentence #1 (8 tokens):
I bought an apple at the supermaket.
[Text=I CharacterOffsetBegin=0 CharacterOffsetEnd=1 PartOfSpeech=PRP Lemma=I NamedEntityTag=O]
...
Coreference set:
        (2,6,[6,7]) -> (1,4,[3,5]), that is: "it" -> "an apple"
Coreference set:
        (2,1,[1,2]) -> (1,1,[1,2]), that is: "I" -> "I"

Java以外の言語からの利用

CoreNLPをサーバとして起動すると http 経由で呼び出せるので、Java系以外の言語からも容易に呼び出すことができます。CoreNLP では Web API の Java 用クライアントが提供されていますが、それ以外に様々な言語のバインディングが公開されています。 CoreNLP のこのサイトではそのような言語やパッケージの一覧をリストアップしています。 Python, Ruby, JavaScriptなど多くのメジャー言語用のライブラリが公開されているので、用途に合うものを利用することが出来そうです。

試しに Python 用のライブラリである py-corenlp を使ってみました。

$ sudo pip install pycorenlp
...
  Downloading pycorenlp-0.3.0.tar.gz
...
Installing collected packages: pycorenlp
  Running setup.py install for pycorenlp ... done
Successfully installed pycorenlp-0.3.0

pip でインストールして以下のようなスクリプトを試してみました。

$ cat test_pycorenlp.py
#!/usr/bin/env python

from pycorenlp import StanfordCoreNLP

nlp = StanfordCoreNLP('http://localhost:9000')

text = 'I bought an apple at the supermaket. I am going to eat it later.'

output = nlp.annotate(text, properties={
    'annotators': 'tokenize,ssplit,pos,lemma,ner,parse,mention,coref',
    'outputFormat': 'text'
})

print(output)

実行してみます。

$ ./test_pycorenlp.py
Sentence #1 (8 tokens):
I bought an apple at the supermaket.
[Text=I CharacterOffsetBegin=0 CharacterOffsetEnd=1 PartOfSpeech=PRP Lemma=I NamedEntityTag=O]
[Text=bought CharacterOffsetBegin=2 CharacterOffsetEnd=8 PartOfSpeech=VBD Lemma=buy NamedEntityTag=O]
...
(ROOT
  (S
    (NP (PRP I))
    (VP (VBD bought)
      (NP (DT an) (NN apple))
      (PP (IN at)
        (NP (DT the) (NN supermaket))))
    (. .)))
...
Sentence #2 (8 tokens):
I am going to eat it later.
[Text=I CharacterOffsetBegin=37 CharacterOffsetEnd=38 PartOfSpeech=PRP Lemma=I NamedEntityTag=O]
[Text=am CharacterOffsetBegin=39 CharacterOffsetEnd=41 PartOfSpeech=VBP Lemma=be NamedEntityTag=O]
...
advmod(eat-5, later-7)
punct(going-3, .-8)

Coreference set:
        (2,6,[6,7]) -> (1,4,[3,5]), that is: "it" -> "an apple"
Coreference set:
        (2,1,[1,2]) -> (1,1,[1,2]), that is: "I" -> "I"

問題なく結果を返しています。

以上、CLI および WebAPI として使う方法を紹介してみました。 次回、本命の Java ライブラリを Scala/Spark で使う方法などについて書きたいと思います。

特許とその制度について 国際出願

お久しぶりです。主に特許関連のデータ処理を担当しているBTと申します。 前回は、日本国に出願する際に申請できる特例と特殊な出願についてご説明いたしました。 これらは日本国において特許を取得しようとする場合に行う特殊な出願や利用できる特例ですが、これらとは別に国際出願という仕組みを利用することも可能です。 今回はこの国際出願についてご説明したいと思います。 宜しくお願いいたします。

国際出願制度とその目的

昔は日本国内でのみビジネスをしていれば十分という時代もありましたが、現在は一企業が様々な国でビジネスを行うのが当たり前なグローバル経済の時代です。 このため、特許も日本国内でのみで取得するのでは無く、現在ビジネスを行っているあるいは今後ビジネスを行う予定のある国においても通用するように特許を取得することが重要です。 しかし、特許制度やその制度ののもと付与される特許の権利は各国で独立したものであるため、それぞれの国において別個に特許を取得することが必要となります。

例えば、ある技術についてはA国では特許を取得できるが、B国ではすでに他者に特許がなされていて取得できないといったことが起こりえます。 また国によって特許として認められない技術の種類に違いがあったり、審査の厳しさにも国毎に違いがあります。 このように、特許の権利を付与するという部分については各国で明確に違いが生じてきますが、どの国においてもまずは出願をしなければならないという点では同じです。

一方で、特許の出願は何よりも早く出願することが重要です。 同じ技術であれば先に出願人に特許が付与され、他者より一日あるいは1時間でも出願が遅ければ特許は付与されません。

以上のような状況で、特許を取得しようとする国全てに対して個別に出願を行わなければならないとすると、出願人に多大な負担が掛かることになり費用も膨大なものとなるでしょう。 そこで、一回の出願で様々な国に同時に出願したことになるような制度が考えられました。 それが、特許協力条約(以下、PCT)という国際条約に基づく出願制度です。 PCTに基づく国際出願(以下、国際出願)では、PCTに加盟する全ての国(PCTの加盟国のうち一部の国のみ選択することも可能)に出願したのと同じ効果を持ちます。 これにより、出願人に掛かる負担を大幅に減らし、各国に個別に出願するよりも費用を抑えることができるようになります。 また、PCTでは出願後に出願人をサポートする仕組みも設けられていますので、これを有効に利用することでさらに出願人の負担と費用の削減を行うことが可能となります。

なお、PCTに加盟する国は現在150カ国以上となっていますので大抵の国は含まれていますが、PCT加盟国でない国において特許を取得したい場合には、国際出願とは別にその国の特許庁に対して個別に出願することが必要となりますので注意が必要です。

国際出願に必要な書類と出願先

国際出願には以下の書類が必要です。

  • 願書(PCT加盟国のうち特許を取得したい国を指定する欄があり、国を選択するか全指定を選択する)
  • 明細書
  • 請求の範囲
  • 必要な図面
  • 要約

また上記の書類に加えて、手数料が必要になります。 国際出願は、出願人のうち少なくとも1人が日本国民又は居住者であれば、その出願は日本国特許庁に出願することができます。また、WIPO国際事務局は、すべてのPCT加盟国の国民又は居住者からのPCT国際出願を受け付けています。

国際調査及び補充国際調査

国際出願されたものについては、国際調査機関(いずれかの国の特許庁や地域特許庁)により国際調査が行われます。 そのの目的は、PCT国際出願の請求の範囲に記載された発明に「関連のある先行技術」を発見することです*。 出願人には国際調査報告が送付されますが、関連があると認められた先行技術又は関連技術が記載された文献のリスト、発明の分類(国際特許分類)、調査を行った技術分野、発明の単一性の欠如に関する情報などが記載されます。 さらに、国際調査機関は、PCT国際出願の請求の範囲に記載された発明が特許性(新規性、進歩性、産業上の利用可能性)を有するものと認められるかどうかの審査官の見解を示した国際調査機関の見解書を作成し、出願人に送付します。 国際調査機関の見解書に示された特許性についての見解は、予備的かつ非拘束的なものであるため、各国での審査に影響を与えるものではありませんが、その後の手続係属、特に国内移行手続(後で説明します)をするか否かの判断のための参考情報となります。

上記の国際調査(主調査)に加えて、出願人の任意の請求により、別の国際調査機関による国際調査を提供する補充国際調査もできます。ただし、補充国際調査を行う補充国際調査機関はオーストリア特許庁(AT)、欧州特許庁(EP)、フィンランド特許庁(FI)、連邦知的財産権特許商標庁(ロシア特許庁:RU)、スウェーデン特許登録庁(SE)、シンガポール知的所有権庁(SG)、ウクライナ国家知的所有権庁(UA)、北欧特許庁(XN)、ヴィシェグラード特許機構(XV)などに限られます。 補充国際調査の目的は、複数の国際調査機関に調査を依頼することによって、先行技術を極力把握し、国内移行した後に新たな先行技術文献が発見される可能性を減少させることです。

国際公開

国際出願されたものについては、優先日(出願時に優先権の主張が伴っていれば元の出願の日、それ以外は国際出願をした日)から18ヶ月を経過した後(出願人が早期公開を希望することも可能)、速やかにWIPO国際事務局によって国際公開されます。 国際公開は、「日本語、アラビア語、中国語、英語、フランス語、ドイツ語、ロシア語、スペイン語、韓国語、ポルトガル語」(公開言語)のいずれかで出願された国際出願についてはその言語で公開されます。それ以外の言語で出願された国際出願は出願人が翻訳した公開言語のひとつの言語で行われます。 ただし、発明の名称、要約書、国際調査報告については、国際出願が英語以外の言語であっても、常に英語の翻訳が添付されます。

この国際公開は、WIPO国際事務局が、国際出願等の内容を世界に公表する意味で行われ、第三者に対して技術情報を提供する役割を果たしています。 国際公開は、すでに出願されている発明を国際的に公表する効果のほか、各指定国においてはその国が国内で未審査の出願を国内公開したときと同等の効果が発生し、先行技術文献としても利用されます。

国際予備審査

国際予備審査は、国際出願された発明の特許性に関する見解を国際調査機関の見解書に加えて入手したいとき、あるいは国際出願の内容を補正したい場合等に、出願人が任意で請求する手続です。 発明の特許性に関しては、国際調査機関がその見解書をすでに作成しています。 したがって、多くの場合、特許性判断の材料としては国際調査機関の見解書で十分なため、近年では予備審査請求の件数は減少し続けています。

しかし、その一方で国際予備審査を請求することによって明細書・図面・請求の範囲の補正が可能になるために、その補正の機会を利用したい、あるいは補正後の国際出願で改めて特許性を判断してほしいなどの理由で国際予備審査を請求する出願人も多く存在します。

国際予備審査を請求する場合、出願人は、国際調査報告と国際調査機関の見解書が出願人に送付された日から3 ヶ月又は優先日から22 ヶ月のうち、どちらか遅く満了する日までに国際予備審査の請求書を提出し、手数料の支払をする必要があります。

国内移行手続

国際出願したものにについて、上記に記載したような段階を経て、指定国のうち権利を取得したい国において審査を受けるためには、それらの国々へ国内移行手続を行う必要があります。 国内移行手続は、条約で決められた期間内(国内移行期限:通常は優先日から30ヶ月以内)に行われなければならないため注意が必要です。

指定国のうち権利を取得したい国の特許庁に対して以下のような手続を行うことが、その国に対する国内移行手続となります(指定国のうち権利を取得したい国が複数ある場合は、それぞれの国で行う必要があります)。

  • 国際出願が作成された言語が、指定官庁が認める言語でない場合、国際出願を認められた言語へ翻訳した「翻訳文の提出」
  • 指定国の国内法令が定める場合、「国内手数料の支払い」
  • 指定国が、国際出願の写しをWIPO 国際事務局から未だ入手していない場合には、「国際出願の写しの提出」(日本も含め、実際に要求する国は少なくなっている)

出願人が所定の期間内に国内移行手続を行わない場合、国内移行がなかった指定国に関しては国際出願としての効果を失い、その国の「国内出願」を取り下げたことと同様の結果(多くの場合、その国際出願は取り下げられたものとみなされる)となります。

国際出願が国内に移行した後は、国内移行した指定国の「国内出願」と同等の取り扱いとなります。 したがって、その後の手続はそれらの国が定める国内法令に従って手続を行います。 なかでも、ほとんどの指定国における特許庁が、在外者が特許庁に対して直接手続することを制限しているため、国内の代理人を立てた上で国内手続を遂行することを国内法令で求めていることに注意が必要です。

まとめ

以上、国際出願について説明をしてきました。次回は、出願公開や審査について見ていきたいと思います。

最後になりましたが、 アスタミューゼでは現在、エンジニア・デザイナーを募集中です。 興味のある方はぜひ 採用サイト からご応募ください。

参考にした資料など

Copyright © astamuse company, ltd. all rights reserved.