OiCyサービス(開発中)の裏側 〜レシピのMRR化〜

f:id:ShinyaOhtani:20180907180851p:plain
Smart Kitchen Summit Japan 2018での様子 : 左からクックパッドの住、金子、大谷(私)

こんにちは、研究開発部のスマートキッチングループの大谷です。 私はスマートキッチンサービス"OiCy"の進むべき方向を考えつつ技術に落とし込む役割を担ってます。 その過程で見つかった大きな技術課題レシピのMRR化(Machine Readable Recipe)について紹介いたします。

レシピのMRR化

先日Smart Kitchen Summit Japan 2018でクックパッドはスマートキッチンレベルを発表しました。 スマートキッチンレベルは、人間がすべての調理タスクを実行するレベル0から始まり、レベルが上がるにつれキッチンの機器から人間への支援の度合いが増え、レベル4では全自動、そして最高位のレベル5では人間と機器が協調して調理できると定義しています。

クックパッドでは、OiCyサービスを通じて最高位のレベルである「人間と機器が協調して調理できるスマートキッチンの世界」を実現しようとしています。

f:id:ShinyaOhtani:20180907174003p:plain
スマートキッチンレベル : レベル5

人間と機器が協調して調理できるスマートキッチンを目指すためにまず越えなければならない課題のひとつは、 レシピを機器が理解できるように機械可読性の高いレシピ(Machine Readable Recipe)に変換すること、 すなわちレシピのMRR化です。

人間が読むのに適した現在のクックパッドレシピのままでは、機器がガスコンロの火力すら読み取ることが困難であり、 人間と機器が協調して調理することなど到底できません。 そこでクックパッドではOiCyサービスを通じてレシピをあらかじめ構造化し機械が解釈しやすい状態にしたレシピを提供しようとしています。

f:id:ShinyaOhtani:20180907174528p:plain
OiCyサービス : レシピを機器が読める形式にして提供 (開発中 2018/08現在)

人間と機器が協調するスマートキッチン

さてそれでは将来のスマートキッチンの機器がレシピから読み取りたい情報とはどのようなものでしょうか。 整理するために料理の基本工程を書き出してみます。

f:id:ShinyaOhtani:20180910124514p:plain:w400
調理工程

他の分類もあるかもしれません。分類の方法はさておきこのように料理工程を書き出してみると、 将来、人間と協調しながら動作してほしい機器は多岐にわたることがわかります。 また機器が多岐であるため、機器が必要とするレシピ情報は更に多岐にわたることが想像されます。

例えば近い未来のコンセントモデルとしてクックパッドが発表したOiCy Tasteが行っている「下処理::下味::調味料をあわせる」では 一度に利用する調味料の種類分量をレシピから読み取ることが求められますし、 また、現代の調理機器の代表格である「本処理::加熱の種類::レンジ加熱」では、 レンジの出力(600Wなど)や時間、電子レンジに入れる材料などをレシピから読み取ることが求められるでしょう。

このような情報をすべて手作業で読み解いて準備することはレシピの数から考え現実的ではありません。 クックパッドでは自然言語処理等を使った自動化を検討しています。

調味料サーバ用途の情報抽出

f:id:ShinyaOhtani:20180907174218p:plain:w300
材料欄

クックパッドのレシピの材料欄の記入は自由度が高いため、「醤油」でも「しょうゆ」や「しょう油」と様々な記述ができます。 また一行に「醤油・みりん・酒・酢」 : 「各大さじ1」などという記述がされていることもあります。 漢字・平仮名や意味の同じ別表現を正規化されたひとつの表現として扱うにはこの記事 で触れている技術を使って機器が読み取りやすい形に変換するようにしています。

あとは一行に「醤油・みりん・酒・酢」と記載されているような特殊ケースや、 「大さじ1」や「大1」など非常に豊かな多様性ある表記の多い単位部分の扱いも難しいところだったのですが、 いくつかのルールを用意することで調味料サーバOiCy Tasteでは9割以上のレシピで正しく動作するようになりました。 エラーケースとしては人間でも理解に苦しむ「オイスターソース : 小さじ1・1/2」などが残っています。 初期検討段階なのでルールベースで処理していますが、この辺は随所で今後機械学習の視点を入れて更に高性能にしたいところです。

少し余談ですが初期検討段階で意識すべきは、課題がざっくりとどのくらいの難易度で、 どんな前処理でどのくらい問題が簡単になるのかといった課題の特徴をクイックに発見することにあると考えています。

そのため初期検討段階では性能を追い求める作業はしません。かわりに性能評価のためのアノテーションと評価環境を作ることは必須であり、時間を割いて構築しています。 性能評価環境と課題の特徴に関する知見さえあればあとで機械学習などを使ってじっくり性能向上を図ることもできます。

電子レンジでの温め用途の情報抽出

f:id:ShinyaOhtani:20180907174006p:plain:w300
各ステップの文章

現代の調理機器の代表格である電子レンジについても情報抽出を試みてみました。 ルールベースの自然言語処理でレシピの各調理ステップの文章から、電子レンジを使うステップなのかどうかの判別は精度95%、再現率100%の性能であることがわかりました。

  • 例:

スープ皿に水、コンソメ、玉ねぎを入れラップをします。500Wで5分、ひっくり返して皿に7分

  → use_microwave

また同様にルールベースの自然言語処理で電子レンジの設定(ワット数と時間)や電子レンジにかける対象物を認識させてみましたところ、設定: 精度90% 再現率95%, 対象物: 精度81% 再現率85%の性能でした。

  • 例:

スープ皿に水、コンソメ、玉ねぎを入れラップをします。500Wで5分、ひっくり返して皿に7分

  → [500W, <300sec, 420sec>, 水+コンソメ+玉ねぎ]

MRR化の今後

将来のスマートキッチンの機器が必要とする情報は、それぞれバラバラのMRRとして用意されるのではなく、 理路整然と構造化され、情報が増えても理解しやすい構造に保存されます。詳細は述べませんがMRRは面白い構造をしています。

まだまだ情報抽出課題は山のように残っています。 もしMRR化やクックパッドの研究開発に興味がある方はぜひ私達と一緒に開発してみませんか?

Cookpad Summer Internship 2018 5 DAY R&D を開催しました

研究開発部の菊田(@yohei_kikuta)です。

20180820 - 20180824 の期間で Cookpad Summer Internship 5 DAY R&D を開催しました。 17 名の学生の方々に参加していただき様々な講義やワークに取り組んでもらいましたが、本記事ではその内容をご紹介したいと思います。

下の写真はインターンの一コマです。 よく分からない手の動きをしてますがともかくインターンの一コマです。

20180830165359

下の写真は懇親会で振る舞われた料理です。

20180830190456

インターンは5日間という短期集中の日程でしたが、以下に挙げるようにように様々なトピックに取り組んでもらいました。

  • 1 日目
    オリエンテーションと機械学習理論の講義(自動微分と deep learning の汎化性能)
  • 2 日目
    自然言語処理の講義(自然言語処理の基礎と演習)と画像分析の講義(画像分析の基礎と演習)
  • 3 日目
    画像分析の講義(軽量モデルの理解と演習)と MLOps の講義(MLOps の概説と演習)
  • 4 日目
    個人ワーク(クックパッドのデータを使ったモデリングやウェブアプリの実装など、自分の興味あるタスクを実施)
  • 5 日目
    発表資料作成と成果発表と懇親会

濃密な講義やワークに集中することに加えて、みんなで一緒に夕食を作ったりもして、実にクックパッドらしい内容でした。

講義資料の紹介

インターンで使用した講義資料を紹介します。 演習で使用したコードはクックパッドのデータと密接に関連しているものもあるため、コードの公開は MLOps で使用したもののみです。

機械学習理論と画像分析に関する講義は菊田(@yohei_kikuta)が担当しました。 スライドを作って話すというのに気分が乗らなかったので、LaTeX で作成し講義もホワイトボードをふんだんに使いました。

講義資料が置いてある GitHub repository へのリンク

自然言語処理に関する講義は原島(http://jun-harashima.net/)が担当しました。 伝統的な自然言語処理の話から始まり、クックパッドのデータを使った様々な分析にも取り組んでもらいました。

MLOps に関する講義は林田(@chie8842)が担当しました。 機械学習をサービスに導入するためにモデル以外に必要になる要素を包括的に概説した内容になっています。

また、MLOps で取り組んだ演習のコードは使用データを公開データに差し替えた上で GitHub で公開しています。
GitHub repository へのリンク

参加者が取り組んだワークの紹介

最終日は 4 日目に取り組んだワークの内容に関する発表会で、それぞれの参加者が思い思いの発表をしてくれました。 講義で理解した自動微分を自分で実装したり、ReLU6 の 6 の数字の意図を検証したり、画像分析のモデルを flask でウェブアプリ化したり、クックパッドのデータを用いてユーザの属性推定や分類モデルを作ったり、内容は多岐にわたりました。

個人ワークに使える時間が 8 時間だけでしたが、限られた時間でも目覚ましい集中力で取り組んでもらった結果、どの参加者の発表もしっかりした内容で驚きました。 正直言って予想を上回る出来でどれも興味深く聞かせてもらいましたが、聞いていて若い人に負けじとこちらも頑張らねばならないなと思いました(個人の感想です)。

参加者の何名かは後日発表資料を公開する(資料作成時にいくつかの注意点を守った上であれば公開は推奨しますと伝えています)と言っていたので、そのうちどんな内容に取り組んだのかがウェブ上で見れるかもしれません。

R&D 単独でインターンを開催した経緯

最後になぜ R&D 単独でインターンを開催したのかの経緯を述べておきます。 去年開催した 17 day TECH INTERNSHIP においても機械学習に関する講義やワークは実施していました。 しかしながら、昨今の機械学習の進展に伴って要求される技術要素も専門性が高まっているので、R&D で独立したインターンを開催することにしました。

人事の方々の協力のおかげで、最初の開催にも関わらず多数の学生に応募いただき、最終的には冒頭で述べたように 17 名の学生に参加していただくことができました。 参加者の多くが既に機械学習に取り組んでいて一定度の知識があったため、インターンの内容もそれに合わせて設計することができたのでどの参加者にとっても有益なものになったのではないかなと思います。 また、今回知り合いになった参加者の方々は、今後も研究会などで会うことがあると思うので、情報交換をし合えるような関係性をぜひ継続してもらいたいと願っています。

まとめ

いかがでしたでしょうか。 今回はインターンの内容紹介でしたが、クックパッドでは機械学習を用いて新たなサービスを創り出していける方を募集しています。 興味のある方はぜひ話を聞きに遊びに来て下さい。 クックパッド株式会社 研究開発部 採用情報

レシピの画像検索に必要な技術

研究開発部の @ayemos です。ダイエット中です。

画像検索とは

検索という言葉からは、いくつかの単語を入力してそれを含む文章を検索するという体験を自然と連想できるかと思います。このような検索の体験の第一歩は、ユーザーが欲しい情報に対して単語の列としてクエリを構築するということから始まります。例えば、「支払うべき住民税の額」という情報を得たい時には「目黒区 住民税」というクエリを自ら考えて入力するといったようにです。

単語列を利用した文章検索を行う際、検索クエリが来るたびに検索対象となる文章を上から下まで全探索するのでは時間がかかってしまいます。そのためしばしば全探索の代わりに転置インデックスを用いて高速化された探索手法を用います。転置インデックスは端的に単語からそれを含む文章(とその位置)をマップする情報であり、これを用いることで、単語の列をクエリとして、それらのすべてあるいは一部を含む文章を高速に引いてくることができます。

一方で例えば、名前を知らない植物や料理を見た時、「赤い 小さい 花」「タイ 屋台 辛い麺」のような単語によるクエリを構築し、欲しい情報にたどり着くのは簡単ではありません。このような場合は例えば、スマートフォンで撮った写真をクエリとして利用した画像検索ができると良いでしょう。しかしながら、単語 => 文書 の転置インデックスを基礎とした検索手法はテキストを主としたデータセットに対しては有効ですが、画像や音声の検索にそのまま転用することはできません。

このような単語列によるクエリの構築にまつわる問題を解決する1つの方法が、画像の特徴量を用いた類似検索です。画像をクエリとした研究は1990年ごろから活発に行われており、[1]にはその経緯と最近の動向がよくまとまっています。そこで今回は、クックパッドのデータを用いて、レシピの写真を利用した類似画像検索を実現した手法について紹介します。

類似画像検索

特徴量を用いた類似検索とは、クエリ画像(以後クエリ)と検索対象画像(以後コンテンツ)からそれぞれ特徴量を抽出し、あらかじめ定義された特徴量同士の類似度の指標に基づいて、クエリから抽出された特徴量と”近い”特徴量を持つコンテンツを特定するという手法です。

検索の準備としてまず、検索対象となるデータ(コンテンツ)に対してその特徴量を抽出し、必要であればインデックスを構築します。ここでいうインデックスについては後に説明しますが、類似な特徴量を持つコンテンツを効率的に見つけるための仕組みであり、文章検索のための転置インデックスとは異なります。

検索の実行時には、入力されたクエリから同様に特徴量を抽出し、それに近いコンテンツを見つけます。この作業を最近傍探索と呼びます。画像を入力とした類似画像検索においては、クエリとコンテンツがともに画像であるため、クエリとコンテンツに対して同じ特徴量抽出器を用いることが多いでしょう。

https://cacoo.com/diagrams/jO707b3qI3EwfwrH-0E135.png

またクエリとコンテンツに対して異なる特徴量抽出器を用いることで、音声から画像を検索したり、画像からテキストデータを検索したりすることも可能です[2]。ただしこの2つの特徴量抽出器は互いに同じ特徴量空間において、似た(似ていない)コンテンツに対して近い(遠い)特徴量を抽出する必要があります。

https://cacoo.com/diagrams/jO707b3qI3EwfwrH-9C154.png

前置きが長くなりましたが、ここからは料理写真の類似画像検索を実現した具体的な方法について説明していきます。

特徴量抽出器の作成

まずは料理写真の特徴量を抽出する方法を説明します。画像の特徴量としては、RGBの統計値やSIFT特徴量などの静的な特徴量や、多層のニューラルネットワークとして構成された画像認識モデルの中間層の出力値を用いることがありますが、今回は画像認識モデルを利用しました。

画像認識モデルを用いた特徴量抽出を行う最も手軽な手法の1つが、ImageNetのデータを用いて構築されたILSVRCデータセットの分類タスクに対して学習されたモデルを利用することです。ILSVRCデータセットは端的にいえば1000種類にあらかじめ分類された大量の画像が含まれるデータセットです。これを分類するために学習されたモデルはそのラベルに該当する写真をよく分類することができるだけでなく、そのような分類を行う過程で、一般的な物体を分類するのに必要な特徴量を画像から抽出することが期待できます。

https://cacoo.com/diagrams/jO707b3qI3EwfwrH-548AE.png

実際に画像認識モデルを応用する多くのケースにおいて、ILSVRCデータセットに対して学習した画像認識モデルを利用し、その分類レイヤーのみを再学習することで必要なタスクに最適化するという手法が取られます。しかしながら、タスクの領域を料理画像に限定する場合など、タスクのドメインによる変化が大きい場合、この手法が有効でない場合があります。その意味で、ILSVRCデータセットは一般的な物体の写真の認識を目的としていますから、料理に関する詳細な特徴を画像から抽出するのに必ずしも適しているとはいえません。

では実際にILSVRCデータセットに対して学習されたInceptionV3モデルが抽出する特徴量を見てみましょう。特徴量としては、最終層付近のPooling層の出力(2048次元)を用います。クックパッドに掲載されていない私の作った料理の写真をクエリとして、クックパッドのレシピ写真の中から近い特徴量を持つ写真を集めてみます。

クエリ画像候補レシピ123
f:id:ayemos:20180828140834j:plain

(ゴーヤチャンプルー)

Cpicon 鮭ソテーの味噌マヨ丼 by SHIORINGO☆ Cpicon ケチャップとマヨネーズで簡単豚肉炒め by KKYYOO Cpicon スタミナ満点★夏野菜ドライカレー by chxa_juni
f:id:ayemos:20180828143802j:plain

(グリーンカレー)

Cpicon ゚・。+☆ナスのあんかけ゚・。+☆ by ゆーちょこ Cpicon 納豆とオクラと長芋となめ茸のサラダ! by ☆sohta☆ Cpicon マヨ少なめポテトサラダ by ◉さっちゃん◉
f:id:ayemos:20180828133246j:plain

(チーズとハムのホットサンド)

Cpicon カボチャの煮物でパンプキンケーキ by ayutomoya Cpicon ケチャチーズトースト♡ by chisafu Cpicon 豆乳黒糖フレンチトースト☆ by okanao

おおむね質感や色味、構図の似た写真が抽出されているように見えますが、料理の種類や品目を見分けるのに有効な特徴量を選択的に捉えられているようには見えません。

そこで今回は、クックパッドに投稿されたレシピのデータを利用し、料理画像により最適化された画像認識モデルを構築しました。まずは、そのようなモデルを学習するためのデータをどのように収集したのかを説明します。

ラベル付きデータの質と量について

クックパッドには現在280万品以上のレシピが公開されており、その大部分について

  • トップ写真
  • タイトル
  • 手順
    • 本文
    • 写真
  • 材料
    • 名前
    • 分量
  • レシピのアクセス/クリックログ
    • 到達した際の検索クエリ

といったメタデータが付与されています。ここから教師あり学習に利用するラベル付きデータを生成することができると考えられます。今回は、似た料理あるいは同じ料理の写真を抽出する画像検索(を行うための画像認識モデルの学習)を目的とするため、 料理のカテゴリ あるいは 料理名 をよく表すデータを得ることを目指します。

ところで、ラベル付きデータの有用さを測る重要な指標としてはまずその質が挙げられます。ラベル付けに間違いがなく、そのラベルの選び方もまた、対象とするドメインに対してMECEな集合を構築していることが望ましいと考えられます。

一方、ラベルを用意するのにかかるコストも見過ごせません。「和食/洋食/中華」のようなラベルはレシピあるいは料理画像にとって重要な情報である一方で、これを得るためには手作業でのラベル付が必要になります。それに対して「手順の本文の長さの合計」など、統計的な処理のみによって得られるメタデータは、それを 自動で 付与できるという利点を持ちます。一方でこのデータは調理にかかる時間や手間との相関が期待できるという意味で示唆のあるデータでもあります。

このように多くの場合において、ラベル付きデータの質と、量あるいは生成コストがトレードオフとなります。従って、機械学習に利用するラベル付きデータの有用さは少なくともその質と量という視点から多面的に評価する必要があるでしょう。特に人手でラベルづけを行う場合、その速度や効率の限界により、生成できるデータのスケールに対して強い制限があるという点には注意が必要です。

ラベル付きレシピデータの大量生成

クックパッドに投稿されたレシピには、先述したとおりタイトル情報が付与されています。しかしながらこれはレシピを投稿したユーザーが入力したものであり、料理名以外の情報が含まれていたり、その表記が様々であったりと、そのままラベルに利用できる状態ではありません。

手作業で料理名ラベルを付けていくことも可能ですが、時間がかかってしまうことに加え、本来的に階層的であると思われる料理名の全体集合とその要素を定めることは難しいという事が予測できます。ただし、料理のオントロジー[3]を構築する取り組みもあるということは補足しておきます。そこで今回は、「質はそこそこ、量はたくさん」なラベル付きデータを生成することを目指し、タイトルからラベルを抽出する仕組みをルールベースで構築しました。

具体的な抽出方法の説明は省きますが、この手法を取ることでクックパッドに公開されている280万以上のレシピデータの中から、120万のレシピに対して約1800種類の料理名ラベルを付与したラベル付きデータを生成することができました。

https://cacoo.com/diagrams/jO707b3qI3EwfwrH-65516.png

モデルの学習と結果の確認

ImageNetで事前学習されたInceptionV3モデルを利用し、上記の方法で得られたラベル付き料理画像データセットの分類タスクに対して学習を行います。学習したモデルを利用してクックパッド外の料理写真の特徴量を抽出し、クックパッドのレシピの中から近い特徴量を持つものを集めてみます。

クエリ画像候補レシピ123
f:id:ayemos:20180828140834j:plain

(ゴーヤチャンプルー)

Cpicon 特製☆ゴーヤチャンプル by もんきちP Cpicon 苦くない♪ゴーヤチャンプルー♡ by mii♡cafe Cpicon ゴーヤチャンプルー by 料理大好き男子
f:id:ayemos:20180828143802j:plain

(グリーンカレー)

Cpicon 簡単☆本格グリーンカレー by ricorico♡ Cpicon 簡単☆ココナッツカレー by junuts Cpicon タイ・グリーンカレー  by ちむのダンナごはん
f:id:ayemos:20180828133246j:plain

(チーズとハムのホットサンド)

Cpicon 簡単‼︎ロールパンでホットサンド‼︎ by まりえcafe Cpicon 《ストウブ》オーブン不要ミルクちぎりパン by kurara1230 Cpicon リメイク♡牛丼でホットサンドっ by 白ぽこ

ImageNetで事前学習されたモデルをそのまま使った場合に比べて、料理としてより近いものが抽出できているように見えます。この辺りは明確な指標で比較するのが難しいですが、少なくとも類似の料理画像を抽出するという目的においてより優れた特徴量抽出ができていると言えそうです。

弱教師あり学習という選択肢

ラベルの正確性をあえて犠牲にし、その引き換えに大量のデータを得るという手法が有効である場合があります。このような手法をweakly supervised learningと呼ぶことがありますが、同様な手法として最近ではInstagramのハッシュタグ情報を利用したFacebook Researchによる実験[4]が有名です。

この手法は『手動でのラベルづけコストが高く、且つラベルの付いていないデータが大量にある』というケースにおいて特に有効と考えられますが、自社でデータをもつ企業にとっては珍しい状況ではないはずです。その意味でweakly supervised learningは、現場での実用性に優れた手法の1つでしょう。

高次元ベクトルの高速な近傍探索

ところで、類似コンテンツの検索を行うためにはクエリから得られた特徴量に対して、それと距離の近いコンテンツを見つけ出す必要があります。検索対象となるコンテンツ(レシピなど)がN件あり、それぞれD次元の特徴量(ベクトル)をもつ場合、クエリに対して距離の近いコンテンツを探すためにはN件全てとの比較が必要となり、それぞれの比較に大雑把に次元数分の計算が必要になります。

これはいうなれば転置インデックスのない文章を上から下まで順番に検索しているようなものですが、検索のユースケースによってはこの計算のコストが受け入れられない場合があります。より正しくは、大きいNに対してインデックスを用いない検索を行う場合、クエリ画像からの特徴量抽出(t0)に対して探索にかかる時間(t1)が、クエリ1件の検索にかかる時間(t0+t1)において支配的になります。

https://cacoo.com/diagrams/jO707b3qI3EwfwrH-31462.png

このような場合には、t1を削減するために近似最近傍探索を用いるという手があります。ベクトルの近似最近傍探索とは、必ずしも正しい最近傍のベクトルを得られる保証がないという点を受け入れる代わりに探索を高速化する手法であり、Facebook Researchの公開するfaissやYahoo! JapanによるNGTなど、いくつかの実装が公開されています。[5]ではその問題設定に始まり各種手法の比較が行われいます。

ちなみにt0とt1をあえて区別した上で議論しましたが、t1を十分に削減できた時に今度は特徴量抽出にかかる時間(t0)がボトルネックとなりうるという点についても述べておきます。これは巨大な画像認識モデルを利用する場合は特に注意が必要です。

まとめ

一般画像認識と異なるドメインにおいて画像検索を行うために、そのドメインのデータを用いて画像認識モデルを学習することで画像検索の性能を向上する手法を紹介しました。また完全なラベル付きデータがない状況で学習を行うために取る方法として、データの質を犠牲にしつつもそれを大量生成するという選択肢を挙げ、実際に生成したデータを用いて学習した結果を示しました。

また今回は得られた特徴量を検索に利用した際の有用性のみを紹介しましたが、分類やレコメンデーションなど、その他のタスクに流用できる可能性もあります。クックパッドにはレシピという中心的なデータがありますが、その様なデータに対してこのような汎用性の期待できる特徴量を用意することで、画像検索を含む様々な応用への可能性を広げるとも考えられます。

レシピは1つの料理を作るのに必要なすべての情報を含み、その名前から写真、材料と手順に至るまで1箇所に集まっているという、饒舌で密度の高いデータです。そんなレシピのデータを使った研究開発に興味のある方は是非採用ページからご応募ください。

参考文献

[1]: https://arxiv.org/abs/1706.06064

[2]: http://im2recipe.csail.mit.edu

[3]: http://www.ls.info.hiroshima-cu.ac.jp/cgi-bin/cooking/wiki.cgi

[4]: https://research.fb.com/publications/exploring-the-limits-of-weakly-supervised-pretraining/

[5]: https://arxiv.org/abs/1610.02455

/* */ @import "/css/theme/report/report.css"; /* */ /* */ body{ background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527163350.png'); background-repeat: repeat-x; background-color:transparent; background-attachment: scroll; background-position: left top;} /* */ body{ border-top: 3px solid orange; color: #3c3c3c; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; line-height: 1.8; font-size: 16px; } a { text-decoration: underline; color: #693e1c; } a:hover { color: #80400e; text-decoration: underline; } .entry-title a{ color: rgb(176, 108, 28); cursor: auto; display: inline; font-family: 'Helvetica Neue', Helvetica, 'ヒラギノ角ゴ Pro W3', 'Hiragino Kaku Gothic Pro', Meiryo, Osaka, 'MS Pゴシック', sans-serif; font-size: 30px; font-weight: bold; height: auto; line-height: 40.5px; text-decoration: underline solid rgb(176, 108, 28); width: auto; line-height: 1.35; } .date a { color: #9b8b6c; font-size: 14px; text-decoration: none; font-weight: normal; } .urllist-title-link { font-size: 14px; } /* Recent Entries */ .recent-entries a{ color: #693e1c; } .recent-entries a:visited { color: #4d2200; text-decoration: none; } .hatena-module-recent-entries li { padding-bottom: 8px; border-bottom-width: 0px; } /*Widget*/ .hatena-module-body li { list-style-type: circle; } .hatena-module-body a{ text-decoration: none; } .hatena-module-body a:hover{ text-decoration: underline; } /* Widget name */ .hatena-module-title, .hatena-module-title a{ color: #b06c1c; margin-top: 20px; margin-bottom: 7px; } /* work frame*/ #container { width: 970px; text-align: center; margin: 0 auto; background: transparent; padding: 0 30px; } #wrapper { float: left; overflow: hidden; width: 660px; } #box2 { width: 240px; float: right; font-size: 14px; word-wrap: break-word; } /*#blog-title-inner{*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-position: left 0px;*/ /*}*/ /*.header-image-only #blog-title-inner {*/ /*background-repeat: no-repeat;*/ /*position: relative;*/ /*height: 200px;*/ /*display: none;*/ /*}*/ /*#blog-title {*/ /*margin-top: 3px;*/ /*height: 125px;*/ /*background-image: url('https://cdn-ak.f.st-hatena.com/images/fotolife/c/cookpadtech/20140527/20140527172848.png');*/ /*background-repeat: no-repeat;*/ /*background-position: left 0px;*/ /*}*/