├── .gitignore ├── LICENSE ├── README.md ├── Simplified_Chinese_Feature └── sin_chinese_feature.txt ├── run.sh ├── sample ├── substoke_feature.txt └── zhwiki.txt └── word2vec ├── CMakeLists.txt ├── bin └── word2vec ├── build.sh ├── build └── build.sh └── src ├── CMakeLists.txt ├── include ├── Utf.h ├── alphabet.h ├── args.h ├── dictionary.h ├── fasttext.h ├── matrix.h ├── model.h ├── real.h └── utils.h └── main.cpp /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Apache License 2 | Version 2.0, January 2004 3 | http://www.apache.org/licenses/ 4 | 5 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 | 7 | 1. Definitions. 8 | 9 | "License" shall mean the terms and conditions for use, reproduction, 10 | and distribution as defined by Sections 1 through 9 of this document. 11 | 12 | "Licensor" shall mean the copyright owner or entity authorized by 13 | the copyright owner that is granting the License. 14 | 15 | "Legal Entity" shall mean the union of the acting entity and all 16 | other entities that control, are controlled by, or are under common 17 | control with that entity. For the purposes of this definition, 18 | "control" means (i) the power, direct or indirect, to cause the 19 | direction or management of such entity, whether by contract or 20 | otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 | outstanding shares, or (iii) beneficial ownership of such entity. 22 | 23 | "You" (or "Your") shall mean an individual or Legal Entity 24 | exercising permissions granted by this License. 25 | 26 | "Source" form shall mean the preferred form for making modifications, 27 | including but not limited to software source code, documentation 28 | source, and configuration files. 29 | 30 | "Object" form shall mean any form resulting from mechanical 31 | transformation or translation of a Source form, including but 32 | not limited to compiled object code, generated documentation, 33 | and conversions to other media types. 34 | 35 | "Work" shall mean the work of authorship, whether in Source or 36 | Object form, made available under the License, as indicated by a 37 | copyright notice that is included in or attached to the work 38 | (an example is provided in the Appendix below). 39 | 40 | "Derivative Works" shall mean any work, whether in Source or Object 41 | form, that is based on (or derived from) the Work and for which the 42 | editorial revisions, annotations, elaborations, or other modifications 43 | represent, as a whole, an original work of authorship. For the purposes 44 | of this License, Derivative Works shall not include works that remain 45 | separable from, or merely link (or bind by name) to the interfaces of, 46 | the Work and Derivative Works thereof. 47 | 48 | "Contribution" shall mean any work of authorship, including 49 | the original version of the Work and any modifications or additions 50 | to that Work or Derivative Works thereof, that is intentionally 51 | submitted to Licensor for inclusion in the Work by the copyright owner 52 | or by an individual or Legal Entity authorized to submit on behalf of 53 | the copyright owner. For the purposes of this definition, "submitted" 54 | means any form of electronic, verbal, or written communication sent 55 | to the Licensor or its representatives, including but not limited to 56 | communication on electronic mailing lists, source code control systems, 57 | and issue tracking systems that are managed by, or on behalf of, the 58 | Licensor for the purpose of discussing and improving the Work, but 59 | excluding communication that is conspicuously marked or otherwise 60 | designated in writing by the copyright owner as "Not a Contribution." 61 | 62 | "Contributor" shall mean Licensor and any individual or Legal Entity 63 | on behalf of whom a Contribution has been received by Licensor and 64 | subsequently incorporated within the Work. 65 | 66 | 2. Grant of Copyright License. Subject to the terms and conditions of 67 | this License, each Contributor hereby grants to You a perpetual, 68 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 | copyright license to reproduce, prepare Derivative Works of, 70 | publicly display, publicly perform, sublicense, and distribute the 71 | Work and such Derivative Works in Source or Object form. 72 | 73 | 3. Grant of Patent License. Subject to the terms and conditions of 74 | this License, each Contributor hereby grants to You a perpetual, 75 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 | (except as stated in this section) patent license to make, have made, 77 | use, offer to sell, sell, import, and otherwise transfer the Work, 78 | where such license applies only to those patent claims licensable 79 | by such Contributor that are necessarily infringed by their 80 | Contribution(s) alone or by combination of their Contribution(s) 81 | with the Work to which such Contribution(s) was submitted. If You 82 | institute patent litigation against any entity (including a 83 | cross-claim or counterclaim in a lawsuit) alleging that the Work 84 | or a Contribution incorporated within the Work constitutes direct 85 | or contributory patent infringement, then any patent licenses 86 | granted to You under this License for that Work shall terminate 87 | as of the date such litigation is filed. 88 | 89 | 4. Redistribution. You may reproduce and distribute copies of the 90 | Work or Derivative Works thereof in any medium, with or without 91 | modifications, and in Source or Object form, provided that You 92 | meet the following conditions: 93 | 94 | (a) You must give any other recipients of the Work or 95 | Derivative Works a copy of this License; and 96 | 97 | (b) You must cause any modified files to carry prominent notices 98 | stating that You changed the files; and 99 | 100 | (c) You must retain, in the Source form of any Derivative Works 101 | that You distribute, all copyright, patent, trademark, and 102 | attribution notices from the Source form of the Work, 103 | excluding those notices that do not pertain to any part of 104 | the Derivative Works; and 105 | 106 | (d) If the Work includes a "NOTICE" text file as part of its 107 | distribution, then any Derivative Works that You distribute must 108 | include a readable copy of the attribution notices contained 109 | within such NOTICE file, excluding those notices that do not 110 | pertain to any part of the Derivative Works, in at least one 111 | of the following places: within a NOTICE text file distributed 112 | as part of the Derivative Works; within the Source form or 113 | documentation, if provided along with the Derivative Works; or, 114 | within a display generated by the Derivative Works, if and 115 | wherever such third-party notices normally appear. The contents 116 | of the NOTICE file are for informational purposes only and 117 | do not modify the License. You may add Your own attribution 118 | notices within Derivative Works that You distribute, alongside 119 | or as an addendum to the NOTICE text from the Work, provided 120 | that such additional attribution notices cannot be construed 121 | as modifying the License. 122 | 123 | You may add Your own copyright statement to Your modifications and 124 | may provide additional or different license terms and conditions 125 | for use, reproduction, or distribution of Your modifications, or 126 | for any such Derivative Works as a whole, provided Your use, 127 | reproduction, and distribution of the Work otherwise complies with 128 | the conditions stated in this License. 129 | 130 | 5. Submission of Contributions. Unless You explicitly state otherwise, 131 | any Contribution intentionally submitted for inclusion in the Work 132 | by You to the Licensor shall be under the terms and conditions of 133 | this License, without any additional terms or conditions. 134 | Notwithstanding the above, nothing herein shall supersede or modify 135 | the terms of any separate license agreement you may have executed 136 | with Licensor regarding such Contributions. 137 | 138 | 6. Trademarks. This License does not grant permission to use the trade 139 | names, trademarks, service marks, or product names of the Licensor, 140 | except as required for reasonable and customary use in describing the 141 | origin of the Work and reproducing the content of the NOTICE file. 142 | 143 | 7. Disclaimer of Warranty. Unless required by applicable law or 144 | agreed to in writing, Licensor provides the Work (and each 145 | Contributor provides its Contributions) on an "AS IS" BASIS, 146 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 | implied, including, without limitation, any warranties or conditions 148 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 | PARTICULAR PURPOSE. You are solely responsible for determining the 150 | appropriateness of using or redistributing the Work and assume any 151 | risks associated with Your exercise of permissions under this License. 152 | 153 | 8. Limitation of Liability. In no event and under no legal theory, 154 | whether in tort (including negligence), contract, or otherwise, 155 | unless required by applicable law (such as deliberate and grossly 156 | negligent acts) or agreed to in writing, shall any Contributor be 157 | liable to You for damages, including any direct, indirect, special, 158 | incidental, or consequential damages of any character arising as a 159 | result of this License or out of the use or inability to use the 160 | Work (including but not limited to damages for loss of goodwill, 161 | work stoppage, computer failure or malfunction, or any and all 162 | other commercial damages or losses), even if such Contributor 163 | has been advised of the possibility of such damages. 164 | 165 | 9. Accepting Warranty or Additional Liability. While redistributing 166 | the Work or Derivative Works thereof, You may choose to offer, 167 | and charge a fee for, acceptance of support, warranty, indemnity, 168 | or other liability obligations and/or rights consistent with this 169 | License. However, in accepting such obligations, You may act only 170 | on Your own behalf and on Your sole responsibility, not on behalf 171 | of any other Contributor, and only if You agree to indemnify, 172 | defend, and hold each Contributor harmless for any liability 173 | incurred by, or claims asserted against, such Contributor by reason 174 | of your accepting any such warranty or additional liability. 175 | 176 | END OF TERMS AND CONDITIONS 177 | 178 | APPENDIX: How to apply the Apache License to your work. 179 | 180 | To apply the Apache License to your work, attach the following 181 | boilerplate notice, with the fields enclosed by brackets "[]" 182 | replaced with your own identifying information. (Don't include 183 | the brackets!) The text should be enclosed in the appropriate 184 | comment syntax for the file format. We also recommend that a 185 | file or class name and description of purpose be included on the 186 | same "printed page" as the copyright notice for easier 187 | identification within third-party archives. 188 | 189 | Copyright [yyyy] [name of copyright owner] 190 | 191 | Licensed under the Apache License, Version 2.0 (the "License"); 192 | you may not use this file except in compliance with the License. 193 | You may obtain a copy of the License at 194 | 195 | http://www.apache.org/licenses/LICENSE-2.0 196 | 197 | Unless required by applicable law or agreed to in writing, software 198 | distributed under the License is distributed on an "AS IS" BASIS, 199 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 | See the License for the specific language governing permissions and 201 | limitations under the License. 202 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | ## Introduction ## 3 | 4 | Paper Link: [cw2vec: Learning Chinese Word Embeddings with Stroke n-gram Information](http://www.statnlp.org/wp-content/uploads/papers/2018/cw2vec/cw2vec.pdf) 5 | 6 | Paper Detail Summary: [cw2vec理论及其实现](https://bamtercelboo.github.io/2018/05/11/cw2vec/) 7 | 8 | ## Requirements ## 9 | 10 | >cmake version 3.10.0-rc5 11 | >make GNU Make 4.1 12 | >gcc version 5.4.0 13 | 14 | ## Run Demo ## 15 | 16 | - I have uploaded `word2vec` binary executable file in `cw2vec/word2vec/bin` and rewrite `run.sh` for simple test, you can run `run.sh` directly for simple test. 17 | 18 | - According to the *[Building cw2vec using cmake](https://github.com/bamtercelboo/cw2vec#building-cw2vec-using-cmake)* to recompile and run other model with the *[Example use cases](https://github.com/bamtercelboo/cw2vec#example-use-cases)*. 19 | 20 | 21 | ## Building cw2vec using cmake ## 22 | 23 | git clone git@github.com:bamtercelboo/cw2vec.git 24 | cd cw2vec && cd word2vec && cd build 25 | cmake .. 26 | make 27 | cd ../bin 28 | 29 | This will create the word2vec binary and also all relevant libraries. 30 | 31 | ## Example use cases ## 32 | the repo not only implement cw2vec(named **substoke**), but also the **skipgram**, **cbow** of word2vec, furthermore, fasttext skipgram is implemented(named **subword**). 33 | 34 | Please modify train.txt and feature.txt into your own train document. 35 | 36 | skipgram: ./word2vec skipgram -input train.txt -output skipgram_out -lr 0.025 -dim 100 -ws 5 -epoch 5 -minCount 10 -neg 5 -loss ns -thread 8 -t 1e-4 -lrUpdateRate 100 37 | 38 | cbow: ./word2vec cbow -input train.txt -output cbow_out -lr 0.05 -dim 100 -ws 5 -epoch 5 -minCount 10 -neg 5 -loss ns -thread 8 -t 1e-4 -lrUpdateRate 100 39 | 40 | subword: ./word2vec subword -input train.txt -output subword_out -lr 0.025 -dim 100 -ws 5 -epoch 5 -minCount 10 -neg 5 -loss ns -minn 3 -maxn 6 -thread 8 -t 1e-4 -lrUpdateRate 100 41 | 42 | substoke: ./word2vec substoke -input train.txt -infeature feature.txt -output substoke_out -lr 0.025 -dim 100 -ws 5 -epoch 5 -minCount 10 -neg 5 -loss ns -minn 3 -maxn 18 -thread 8 -t 1e-4 -lrUpdateRate 100 43 | 44 | 45 | 46 | 47 | ## Get chinese stoke feature ## 48 | substoke model need chinese stoke feature(`-infeature`),I have written a script to acquire the Chinese character of stroke information from [handian](http://www.zdic.net/). here is the script [extract_zh_char_stoke](https://github.com/bamtercelboo/corpus_process_script/tree/master/extract_zh_char_stoke), see the readme for details. 49 | 50 | Now, I have uploaded a file of stroke features in simplified Chinese, which contains a total of 20901 Chinese characters for use. The file in the [Simplified_Chinese_Feature](https://github.com/bamtercelboo/cw2vec/blob/master/Simplified_Chinese_Feature/sin_chinese_feature.txt) folder. Or you can use the above script to get it yourself. 51 | 52 | 53 | 54 | **feature file(feature.txt) like this**: 55 | 56 | 中 丨フ一丨 57 | 国 丨フ一一丨一丶一 58 | 庆 丶一ノ一ノ丶 59 | 假 ノ丨フ一丨一一フ一フ丶 60 | 期 一丨丨一一一ノ丶ノフ一一 61 | 香 ノ一丨ノ丶丨フ一一 62 | 江 丶丶一一丨一 63 | 将 丶一丨ノフ丶一丨丶 64 | 涌 丶丶一フ丶丨フ一一丨 65 | 入 ノ丶 66 | 人 ノ丶 67 | 潮 丶丶一一丨丨フ一一一丨ノフ一一 68 | ...... 69 | 70 | I provided a feature file for the test,path is `sample/substoke_feature.txt`. 71 | 72 | 73 | ## Substoke model output embeddings ## 74 | 75 | - In this paper, the context word embeddings is used directly as the final word vector. However, according to the idea of fasttext, I also take into account the n-gram feature vector of the stroke information, the n-gram feature vector of the stroke information is taken as an average substitute for the word vector. 76 | 77 | - There are two outputs in substoke model: 78 | - output ends with vec is the context word vector. 79 | - output ends with avg is the n-gram feature vector average. 80 | 81 | 82 | ## Word similarity evaluation ## 83 | 84 | #### 1. Evaluation script #### 85 | I have already written a Chinese word similarity evaluation script. [Chinese-Word-Similarity-and-Word-Analogy](https://github.com/bamtercelboo/Chinese_Word_Similarity_and_Word_Analogy), see the readme for details. 86 | 87 | #### 2. Parameter Settings #### 88 | The parameters are set as follows: 89 | 90 | dim 100 91 | window sizes 5 92 | negative 5 93 | epoch 5 94 | minCount 10 95 | lr skipgram(0.025),cbow(0.05),substoke(0.025) 96 | n-gram minn=3, maxn=18 97 | 98 | #### 3. result #### 99 | Experimental results show follows 100 | 101 | ![](https://i.imgur.com/u0O6RoE.jpg) 102 | 103 | ![](https://i.imgur.com/p4gjsaD.jpg) 104 | 105 | 106 | ## Full documentation ## 107 | Invoke a command without arguments to list available arguments and their default values: 108 | 109 | ./word2vec 110 | usage: word2vec 111 | The commands supported by word2vec are: 112 | 113 | skipgram ------ train word embedding by use skipgram model 114 | cbow ------ train word embedding by use cbow model 115 | subword ------ train word embedding by use subword(fasttext skipgram) model 116 | substoke ------ train chinses character embedding by use substoke(cw2vec) model 117 | 118 | ./word2vec substoke -h 119 | Train Embedding By Using [substoke] model 120 | Here is the help information! Usage: 121 | 122 | The Following arguments are mandatory: 123 | -input training file path 124 | -infeature substoke feature file path 125 | -output output file path 126 | 127 | The Following arguments are optional: 128 | -verbose verbosity level[2] 129 | 130 | The following arguments for the dictionary are optional: 131 | -minCount minimal number of word occurences default:[10] 132 | -bucket number of buckets default:[2000000] 133 | -minn min length of char ngram default:[3] 134 | -maxn max length of char ngram default:[6] 135 | -t sampling threshold default:[0.001] 136 | 137 | The following arguments for training are optional: 138 | -lr learning rate default:[0.05] 139 | -lrUpdateRate change the rate of updates for the learning rate default:[100] 140 | -dim size of word vectors default:[100] 141 | -ws size of the context window default:[5] 142 | -epoch number of epochs default:[5] 143 | -neg number of negatives sampled default:[5] 144 | -loss loss function {ns} default:[ns] 145 | -thread number of threads default:[1] 146 | -pretrainedVectors pretrained word vectors for supervised learning default:[] 147 | -saveOutput whether output params should be saved default:[false] 148 | 149 | ## References ## 150 | [1] [Cao, Shaosheng, et al. "cw2vec: Learning Chinese Word Embeddings with Stroke n-gram Information." (2018). ](http://www.statnlp.org/wp-content/uploads/papers/2018/cw2vec/cw2vec.pdf) 151 | [2][ Bojanowski, Piotr, et al. "Enriching word vectors with subword information." arXiv preprint arXiv:1607.04606 (2016).](https://arxiv.org/pdf/1607.04606.pdf) 152 | [3] [fastText-github](https://github.com/facebookresearch/fastText) 153 | [4] [cw2vec理论及其实现](https://bamtercelboo.github.io/2018/05/11/cw2vec/) 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | 2 | path_input=./sample 3 | path_out=. 4 | 5 | rm -rf ./bin 6 | cp -rf ./word2vec/bin . 7 | 8 | ./bin/word2vec skipgram -input ${path_input}/zhwiki.txt -output ${path_out}/zhwiki_skipgram.300d -lr 0.025 -dim 300 -ws 5 -epoch 5 -minCount 10 -neg 5 -loss ns -thread 8 -t 1e-4 -lrUpdateRate 100 9 | 10 | 11 | -------------------------------------------------------------------------------- /sample/substoke_feature.txt: -------------------------------------------------------------------------------- 1 | 中 丨フ一丨 2 | 国 丨フ一一丨一丶一 3 | 庆 丶一ノ一ノ丶 4 | 假 ノ丨フ一丨一一フ一フ丶 5 | 期 一丨丨一一一ノ丶ノフ一一 6 | 香 ノ一丨ノ丶丨フ一一 7 | 江 丶丶一一丨一 8 | 将 丶一丨ノフ丶一丨丶 9 | 涌 丶丶一フ丶丨フ一一丨 10 | 入 ノ丶 11 | 人 ノ丶 12 | 潮 丶丶一一丨丨フ一一一丨ノフ一一 13 | 法 丶丶一一丨一フ丶 14 | 新 丶一丶ノ一一丨ノ丶ノノ一丨 15 | 社 丶フ丨丶一丨一 16 | 港 丶丶一一丨丨一ノ丶フ一フ 17 | 九 ノフ 18 | 月 ノフ一一 19 | 三 一一一 20 | 十 一丨 21 | 日 丨フ一一 22 | 电 丨フ一一フ 23 | 史 丨フ一ノ丶 24 | 无 一一ノフ 25 | 前 丶ノ一丨フ一一丨丨 26 | 例 ノ丨一ノフ丶丨丨 27 | 的 ノ丨フ一一ノフ丶 28 | 连 一フ一丨丶フ丶 29 | 续 フフ一一丨フ丶丶一ノ丶 30 | 放 丶一フノノ一ノ丶 31 | 了 フ丨 32 | 一 一 33 | 整 一丨フ一丨ノ丶ノ一ノ丶一丨一丨一 34 | 个 ノ丶丨 35 | 礼 丶フ丨丶フ 36 | 拜 ノ一一ノ一一一一丨 37 | 届 フ一ノ丨フ一丨一 38 | 时 丨フ一一一丨丶 39 | 从 ノ丶ノ丶 40 | 大 一ノ丶 41 | 陆 フ丨一一丨フ丨 42 | 边 フノ丶フ丶 43 | 境 一丨一丶一丶ノ一丨フ一一ノフ 44 | 观 フ丶丨フノフ 45 | 光 丨丶ノ一ノフ 46 | 客 丶丶フノフ丶丨フ一 47 | 数 丶ノ一丨ノ丶フノ一ノ一ノ丶 48 | 预 フ丶フ丨一ノ丨フノ丶 49 | 计 丶フ一丨 50 | 会 ノ丶一一フ丶 51 | -------------------------------------------------------------------------------- /sample/zhwiki.txt: -------------------------------------------------------------------------------- 1 | 数学 数学 是 利用 符号语言 研究 数量 结构 变化 以及 空间 等 概念 的 一门 学科 从 某种 角度看 属于 形式 科学 的 一种 数学 透过 抽象化 和 逻辑推理 的 使用 由 计数 计算 量度 和 对 物体 形状 及 运动 的 观察 而 产生 数学家 们 拓展 这些 概念 为了 公式化 新 的 猜想 以及 从 选定 的 公理 及 定义 中 建立 起 严谨 推导 出 的 定理 基础 数学 的 知识 与 运用 总是 个人 与 团体 生活 中 不可或缺 的 一环 对 数学 基本概念 的 完善 早 在 古埃及 美索不达米亚 及 古印度 内 的 古代 数学 文本 便 可观 见 而 在 古希腊 那里 有 更为 严谨 的 处理 从 那时 开始 数学 的 发展 便 持续 不断 地 小幅 进展 至 世纪 的 文艺复兴 时期 因为 新 的 科学 发现 和 数学 革新 两者 的 交互 致使 数学 的 加速 发展 直至 今日 数学 并 成为 许多 国家 及 地区 的 教育 范畴 中 的 一部分 今日 数学 使用 在 不同 的 领域 中 包括 科学 工程 医学 和 经济学 等 数学 对 这些 领域 的 应用 通常 被 称为 应用 数学 有时 亦 会 激起 新 的 数学 发现 并 导致 全新 学科 的 发展 例如 物理学 的 实质性 发展 中 建立 的 某些 理论 激发 数学家 对于 某些 问题 的 不同 角度 的 思考 数学家 也 研究 纯数学 就是 数学 本身 的 实质性 内容 而 不以 任何 实际 应用 为 目标 虽然 许多 研究 以 纯数学 开始 但 其 过程 中 也 发现 许多 应用 之 处 西方 语言 中 数学 一 词源 自于 古希腊 语 的 其 有 学习 学问 科学 以及 另外 还有 个 较 狭义 且 技术性 的 意思 数学 研究 即使 在 其 语源 内其 形容词 意思 为 和 学习 有关 的 或 用功 的 亦 会 被 用来 指 数学 的 其 在 英语 中 表面 上 的 复数 形式 及 在 法语 中 的 表面 复数 形式 可溯 至 拉丁文 的 中性 复数 由 西塞罗 译自 希腊文 复数 此一 希腊语 被 亚里士多德 拿来 指 万物 皆 数 的 概念 数学 一词 大约 产生 于 宋元 时期 多指 象数 之学 但 有时 也 含有 今天 上 的 数学 意义 例如 秦九韶 的 数学 九章 永乐 大典 记即 数书 九章 也 被 宋代 周密 所 着 的 癸 辛杂 识记 为 数学 大略 数学 通轨 明代 柯尚 迁 着 数学 钥 清代 杜知 耕着 数学 拾遗 清代 丁取忠 撰 直到 年 经过 中国 数学 名词 审查 委员会 研究 算学 与 数学 两词 的 使用 状况 后 确认 以 数学 表示 今天 意义 上 的 数学 含义 数学 有着 久远 的 历史 它 被 认为 起源于 人类 早期 的 生产 活动 中国 古代 的 六艺 之一 就 有数 数学 一词 在 西方 有 希腊语 词源 意思 是 学问 的 基础 源于 科学知识 学问 史前 的 人类 就 已 尝试 用 自然 的 法则 来 衡量 物质 的 多少 时间 的 长短 等 抽象 的 数量 关系 比如 时间 单位 有 日 季节 和 年 等 算术 加减乘除 也 自然而然 地 产生 了 古代 的 石碑 及 泥版 亦 证实 了 当时 已有 几何 的 知识 更进一步 则 需要 写作 或 其他 可 记录 数字 的 系统 如符木 或 于 印加帝国 内 用来 储存 数据 的 奇普 历史 上 曾 有 过 许多 不同 的 记数 系统 在 最初 有 历史记录 的 时候 数学 内 的 主要 原理 是 为了 做 税务 和 贸易 等 相关 计算 为 了解 数字 间 的 关系 为了 测量 土地 以及 为了 预测 天文 事件 而 形成 的 这些 需要 可以 简单 地被 概括 为 数学 对 数量 结构 空间 及 时间 方面 的 研究 到 了 世纪 算术 初等 代数 以及 三角学 等 初等数学 已 大体 完备 世纪 变量 概念 的 产生 使 人们 开始 研究 变化 中 的 量 与 量 的 互相 关系 和 图形 间 的 互相 变换 微积分 的 概念 也 在 此时 形成 随着 数学 转向 形式化 为 研究 数学 基础 而 产生 的 集合论 和 数理逻辑 等 也 开始 发展 数学 的 重心 从 求解 实际 问题 转变 到 对 一般 形式 上 的 思考 从古至今 数学 便 一直 不断 地 延展 且 与 科学 有 丰富 的 相互作用 两者 的 发展 都 受惠 于 彼此 在历史上 有着 许多 数学 发现 并且 直至 今日 都 不断 地有 新 的 发现 据于 美国 数学 会 通报 年 月 的 期刊 中 所说 存放 于 数学 评论 资料库 中 论文 和 书籍 的 数量 自年 数学 评论 的 创刊 年份 现已 超过 了 一百九十 万份 而且 每年 还 增加 超过 七万 五千 份此 一 学海 的 绝 大部份 为 新 的 数学 定理 及其 证明 每当 有 涉及 数量 结构 空间 及 变化 等 方面 的 困难 问题 时 通常 就 需要 用到 数学 工具 去 解决问题 而 这 往往 也 拓展 了 数学 的 研究 范畴 一 开始 数学 的 运用 可见 于 贸易 土地 测量 及 之后 的 天文学 今日 所有 的 科学 都 存在 着 值得 数学家 研究 的 问题 且 数学 本身 亦 给出 了 许多 的 问题 牛顿 和 莱布尼兹 是 微积分 的 发明者 费曼 发明 了 费曼 路径 积分 这是 推理 及 物理 洞察 二者 的 产物 而 今日 的 弦 理论 亦 引申 出新 的 数学 一些 数学 只 和 生成 它 的 领域 有关 且 用来 解答 此 领域 的 更 多 问题 但 一般 被 一 领域 生成 的 数学 在 其他 许多 领域 内 也 十分 有用 且 可以 成为 一般 的 数学 概念 即使 是 最纯 的 数学 通常 亦 有 实际 的 用途 此一 非比寻常 的 事实 被 年 诺贝尔 物理 奖得主 维格纳 称为 数学 在 自然科学 中 不可 想像 的 有效性 如同 大多数 的 研究 领域 科学知识 的 爆发 导致 了 数学 的 专业化 主要 的 分歧 为 纯数学 和 应用 数学 在 应用 数学 内 又 被 分成 两大 领域 并且 变成 了 它们 自身 的 学科 统计学 和 电脑 科学 许多 数学家 谈论 数学 的 优美 其内 在 的 美学 及美 简单 和 一般化 即 为 美的 一种 另外 亦 包括 巧妙 的 证明 如 欧几里得 对 存在 无限 多 质数 的 证明 又 或者 是 加快 计算 的 数值 方法 如 快速 傅立叶 变换 高 德菲 哈罗德 哈代 在 一个 数学家 的 自白 一书中 表明 他 相信 单单是 美学 上 的 意义 就 已经 足够 作为 纯数学 研究 的 正当理由 我们 现今 所 使用 的 大部分 数学 符号 在 世纪 后 才 被 发明 出来 的 在此之前 数学 以 文字 的 形式 书写 出来 这种 形式 会 限制 了 数学 的 发展 现今 的 符号 使得 数学 对于 专家 而言 更 容易 掌握 但 初学者 却常 对此 感到 怯步 它 被 极度 的 压缩 少量 的 符号 包含 着 大量 的 讯息 如同 音乐 符号 一般 现今 的 数学 符号 有 明确 的 语法 并且 有效 地 对 讯息 作 编码 这是 其他 书写 方式 难以 做到 的 符号化 和 形式化 使得 数学 迅速 发展 并 帮助 各个 科学 领域 建立 基础 支撑 理论 数学 语言 亦 对 初学者 而言 感到 困难 如 或 和 只 这些 字 有着 比 日常用语 更 精确 的 意思 亦 困恼 着 初学者 的 如 开放 和域 等 字 在 数学 里 有着 特别 的 意思 数学 术语 亦 包括 如同 胚及 可积性 等 专有名词 但 使用 这些 特别 符号 和 专有 术语 是 有 其 原因 的 数学 需要 比 日常用语 更 多 的 精确性 数学家 将 此 对 语言 及 逻辑 精确性 的 要求 称为 严谨 但 在 现实 应用 中 舍弃 一些 严谨性 往往 会 得到 更好 的 结果 严谨 是 数学 证明 中 很 重要 且 基本 的 一部 份 数学家 希望 他们 的 定理 以 系统化 的 推理 依着 公理 被 推论 下去 这是 为了 避免 依着 不 可靠 的 直观 而 推出 错误 的 定理 而 这 情形 在历史上 曾 出现 过 许多 的 例子 在 数学 中 被 期许 的 严谨 程度 因 着 时间 而 不同 希腊人 期许 着 仔细 的 论证 但 在 牛顿 的 时代 所 使用 的 方法 则 较 不 严谨 牛顿 为了 解决问题 所 做 的 定义 到 了 十九世纪 才 重新 以 小心 的 分析 及 正式 的 证明 来 处理 今日 数学家 们 则 持续 地 在 争论 电脑 辅助 证明 的 严谨 度当 大量 的 计算 难以 被 验证 时其 证明 亦 很难说 是 足够 地 严谨 公理 在 传统 的 思想 中是 不证 自明 的 真理 但 这种 想法 是 有 问题 的 在 形式 上 公理 只是 一串 符号 其 只 对 可以 由 公理 系统 导出 的 公式 之 内容 有 意义 希尔伯特 计划 即 是 想 将 所有 的 数学 放在 坚固 的 公理 基础 上 但 依据 哥德尔 不 完备 定理 每一 相容 且 能 蕴涵 皮亚诺 公理 的 公理 系统 必 含有 一 不可 决定 的 公式 因而 所有 数学 的 最终 公理化 是 不 可能 的 尽管如此 数学 常常 被 想像成 只是 某种 公理化 的 集合论 在 此 意义 下 所有 数学 叙述 或 证明 都 可以 写成 集合论 的 公式 卡尔 弗里德里希 高斯 称 数学 为 科学 的 皇后 在 拉丁 原文 以及 其 德语 中 对应 于 科学 的 单字 的 意思 皆 为 知识 领域 而 实际上 一词 在 英语 内 本来 就是 这个 意思 且 无疑 问地 数学 在 此 意义 下 确实 是 一门 科学 将 科学 限定 在 自然科学 则 是 在此之后 的 事 若 认为 科学 是 只 指 物理 的 世界 时则 数学 或 至少 是 纯数学 不会 是 一门 科学 爱因斯坦 曾 如此 描述 数学 定律 越 和 现实 有关 它们 越 不 确定 若 它们 越是 确定 的话 它们 和 现实 越 不会 有关 许多 哲学家 相信 数学 在 经验 上 不具 可否 证性 且 因此 不是 卡尔 波普尔 所 定义 的 科学 但 在 年代 时 在 数理逻辑 上 的 重大进展 显示 数学 不能 归并 至 逻辑 内且 波普尔 推断 大部份 的 数学 定律 如 物理 及 生物学 一样 是 假设 演绎 的 纯数学 因此 变得 更 接近 其 假设 为 猜测 的 自然科学 比 它 现在 看起来 更 接近 然而 其他 的 思想家 如较 著名 的 拉 卡托斯 便 提供 了 一个 关于 数学 本身 的 可否 证性 版本 另 一 观点 则 为 某些 科学 领域 如 理论物理 是 其 公理 为 尝试 着 符合 现实 的 数学 而 事实上 理论 物理学家 齐曼 即 认为 科学 是 一种 公众 知识 因此 亦 包含 着 数学 在 任何 的 情况 下 数学 和 物理 科学 的 许多 领域 都 有着 很多 相同 的 地方 尤其 是从 假设 所得 的 逻辑 推论 之 探索 直觉 和 实验 在 数学 和 科学 的 猜想 建构 上 皆 扮演着 重要 的 角色 实验 数学 在 数学 中 的 重要性 正 持续 地 在 增加 且 计算 和 模拟 在 科学 及 数学 中 所 扮演 的 角色 也 越来越 加重 减轻 了 数学 不 使用 科学 方法 的 缺点 在 史蒂芬 沃尔夫 勒姆 年 的 著作 一种 新 科学 中 他 提出 计算 数学 应 被 视为 其 自身 的 一 科学 领域 来 探索 数学家 对此 的 态度 并 不 一致 一些 研究 应用 数学 的 数学家 觉得 他们 是 科学家 而 那些 研究 纯数学 的 数学家 则 时常 觉得 他们 是 在 一门 较 接近 逻辑 的 领域 内 工作 且 因此 基本上 是 个 哲学家 许多 数学家 认为 称 他们 的 工作 是 一种 科学 是 低估 了 其 美学 方面 的 重要性 以及 其 做 为 七大 博雅 教育 之一 的 历史 另外 亦 有人 认为 若 忽略 其 与 科学 之间 的 关联 是 假装 没 看到 数学 和 其 在 科学 与 工程 之间 的 交互 促进 了 许多 在 数学 上 的 发展 此一 事实 这 两种 观点 之间 的 差异 在 哲学 上 产生 了 数学 是 被 创造 如 艺术 或是 被 发现 如 科学 的 争议 大学 院系 划分 中 常见 科学 和 数学系 这 指出 了 这 两个 领域 被 看作 有 紧密联系 而 非 同一 实际上 数学家 通常 会 在 大体上 与 科学家 合作 但 在 细节 上 却 会 分开 这 亦 是 数学 哲学 众多 议题 的 其中 一个 如上所述 数学 主要 的 学科 最先 产生 于 商业 上 计算 的 需要 了解 数字 间 的 关系 测量 土地 及 预测 天文 事件 这 四种 需要 大致 地 与 数量 结构 空间 及 变化 即 算术 代数 几何 及 分析 等 数学 上 广泛 的 子 领域 相关 连 着 除了 上述 主要 的 关注 之外 亦 有 用来 探索 由 数学 核心 至 其他 领域 上 之间 的 连结 的 子 领域 至 逻辑 至 集合论 基础 至 不同 科学 的 经验 上 的 数学 应用 数学 及 较 近代 的 至 不确定性 的 严格 研究 为了 阐明 数学 基础 数学 逻辑 和 集合论 等 领域 被 发展 了 出来 数学 逻辑 专注 于 将 数学 置 在 一 坚固 的 公理 架构 上 并 研究 此一 架构 的 结果 就 其 本身 而言 其为 哥德尔 第二 不 完备 定理 所属 的 领域 而 这 或许 是 逻辑 中 最 广为流传 的 成果 总 存在 一 不能 被 证明 而 又 为 真的 定理 现代 逻辑 被 分成 递归论 模型 论 和 证明 论且 和 理论 电脑 科学 有着 密切 的 关连性 千禧年 大奖 难题 中 的 问题 就是 理论 电脑 科学 中 的 著名 问题 数量 的 研究 起于 数一 开始 为 熟悉 的 自然数 及 整数 与 被 描述 在 算术 内 的 自然数 及 整数 的 算术 运算 整数 更深 的 性质 于 数论 中有 详细 的 研究 此一 理论 包括 了 如费马 最后 定理 等 著名 的 结果 数论 还 包括 两个 被 广为 探讨 的 未解 问题 孪生 质数 猜想 及 哥德巴赫猜想 当数系 更进一步 发展 时 整数 被 视为 有理数 的 子集 而 有理数 则 包含 于 实数 中 连续 的 量 即 是 以 实数 来 表示 的 实数 则 可以 被 进一步 广义 化成 复数 数 的 进一步 广义 化 可以 持续 至 包含 四元 数及 八元 数从 自然数 亦 可以 推广 到 超限 数它 形式化 了 计数 至 无限 的 这 一 概念 另 一个 研究 的 领域 为 大小 这个 导致 了 基数 和 之后 对 无限 的 另外 一种 概念 阿列 夫数 它 允许 无限 集合 之间 的 大小 可以 做 有 意义 的 比较 许多 如数 及 函数 的 集合 等 数学 物件 都 有着 内含 的 结构 这些 物件 的 结构 性质 被 探讨 于群 环域 体 等 抽象 系统 中该 些 物件 事实上 也 就是 这样 的 系统 此 为 代数 的 领域 在 此 有 一个 很 重要 的 概念 即 广义 化至 向量 空间 的 向量 它于 线性代数 中 被 研究 向量 的 研究 结合 了 数学 的 三个 基本 领域 数量 结构 及 空间 向量分析 则 将 其 扩展 至 第四个 基本 的 领域 内即 变化 创立 于 二十世纪 三十 年代 的 法国 的 布尔 巴基 学派 认为 纯粹 数学 是 研究 抽象 结构 的 理论 结构 就是 以 初始 概念 和 公理 出发 的 演绎 系统 布尔 巴基 学派 认为 有 三种 基本 的 抽象 结构 代数 结构 群环域 序 结构 偏序 全序 拓扑 结构 邻域 极限 连通性 维数 空间 的 研究 源自 于 几何 尤其 是 欧几里得 几何 三角学 则 结合 了 空间 及 数且 包含 有 著名 的 勾股定理 现今 对 空间 的 研究 更 推广 到 了 更 高维 的 几何 非 欧几里得 几何 其 在 广义 相对论 中 扮演着 核心 的 角色 及 拓扑学 数 和 空间 在 解析几何 微分 几何 和 代数 几何 中 都 有着 很 重要 的 角色 在 微分 几何 中 有着 纤维 丛及 流形 上 的 微积分 等 概念 在 代数 几何 中 有着 如 多项式 方程 的 解集 等 几何 物件 的 描述 结合 了 数 和 空间 的 概念 亦 有着 拓扑 群 的 研究 结合 了 结构 与 空间 李群 被 用来 研究 空间结构 及 变化 在 其 许多 分支 中 拓扑学 可能 是 二十世纪 数学 中 有着 最大 进展 的 领域 并 包含 有 存在 已久 的 庞加莱 猜想 以及 有 争议 的 四色 定理 庞加莱 猜想 已 在 年 确认 由 俄罗斯 数学家 格里 戈里 佩雷尔曼 证明 而 四色 定理 已 在 年 由凯 尼斯 阿佩尔 和 沃夫冈 哈肯 用 电脑 证明 而 从来 没有 由 人力 来 验证 过 了解 及 描述 变化 在 自然科学 里 是 一 普遍 的 议题 而 微积分 更为 研究 变化 的 有利 工具 函数 诞生 于 此 做 为 描述 一 变化 的 量 的 核心 概念 对于 实数 及 实变 函数 的 严格 研究 为实 分析 而复 分析 则 为 复数 的 等价 领域 黎曼 猜想 数学 最 基本 的 未决 问题 之一 便是 以 复分析 来 描述 的 泛 函 分析 注重 在 函数 的 一般 为 无限 维空间 上泛 函 分析 的 众多 应用 之一 为 量子力学 许多 的 问题 很 自然 地会 导出 一个 量 与其 变化率 之间 的 关系 而 这 在 微分方程 中 被 研究 在 自然界 中 的 许多 现象 可以 被 动力系统 所 描述 混沌 理论 则 是 对系统 的 既 不可 预测 而 又 是 决定 的 行为 作 明确 的 描述 离散数学 是 指 对 理论 电脑 科学 最有 用处 的 数学 领域 之 总称 这 包含 有 可 计算 理论 计算 复杂性 理论 及 资讯 理论 可 计算 理论 检验 电脑 的 不同 理论 模型 之 极限 这 包含 现知 最 有力 的 模型 图灵机 复杂性 理论 研究 可以 由 电脑 做 为 较易 处理 的 程度 有些 问题 即使 理论 是 可以 以 电脑 解 出来 但 却 因为 会 花费 太多 的 时间 或 空间 而 使得 其 解答 仍然 不 为 实际上 可行 的 尽管 电脑 硬体 的 快速 进步 最后 资讯 理论 专注 在 可以 储存 在 特定 媒介 内 的 资料 总量 且 因此 有 压缩 及 熵 等 概念 做 为 一 相对 较 新 的 领域 离散数学 有 许多 基本 的 未解 问题 其中 最 有名 的 为 问题 千禧年 大奖 难题 之一 一般 相信 此 问题 的 解答 是 否定 的 应用 数学 思考 将 抽象 的 数学 工具 运用 在 解答 科学 工商业 及其 他 领域 上 之 现实 问题 应用 数学 中 的 一 重要 领域 为 统计学 它 利用 机率论 为 其 工具 并 允许 对 含有 机会 成分 的 现象 进行 描述 分析 与 预测 大部份 的 实验 调查 及 观察 研究 需要 统计 对 其 资料 的 分析 许多 的 统计学家 并不认为 他们 是 数学家 而 比较 觉得 是 合作 团体 的 一份 子 数值 分析 研究 有 什么 计算方法 可以 有效 地 解决 那些 人力 所限而算 不出 的 数学 问题 它 亦 包含 了 对 计算 中 舍入 误差 或 其他 来源 的 误差 之 研究 数学 奖 通常 和 其他 科学 的 奖项 分开 数学 上 最 有名 的 奖为 菲尔 兹奖 创立 于 年 每 四年 颁奖 一次 它 通常 被 认为 是 数学 的 诺贝尔奖 另 一个 国际 上 主要 的 奖项 为 阿贝尔 奖 创立 于 年 两者 都 颁奖 于 特定 的 工作 主题 包括 数学 新 领域 的 创新 或 已 成熟 领域 中未 解决问题 的 解答 著名 的 个 问题 称为 希尔伯特 的 个 问题 于 年 由 德国 数学家 大卫 希尔伯特 所 提出 这 一连串 的 问题 在 数学家 之间 有着 极高 的 名望 且 至少 有 九个 问题 已经 被 解答 了 出来 另 一新 的 七个 重要 问题 称为 千禧年 大奖 难题 发表 于 年 对 其 每 一个 问题 的 解答 都 有着 一百万美元 的 奖金 而 当中 只有 一个 问题 黎曼 猜想 和 希尔伯特 的 问题 重复 2 | 哲学 哲学 英语 是 对 普遍 的 和 基本 的 问题 的 研究 这些 问题 通常 和 存在 知识 价值 理性 心灵 语言 等 有关 哲学 与 其他 学科 的 不同 是 其 批判 的 方式 通常 是 系统化 的 方法 并 以 理性 论证 为 基础 在 日常用语 中其 也 可 被 引申为 个人 或 团体 的 最 基本 信仰 概念 或 态度 英语 词语 源于 古希腊 语中 的 意思 为 爱 智慧 有时 也 译 为 智慧 的 朋友 该词 由 爱 的 派生词 去 爱 和 智慧 组合而成 一般 认为 古希腊 思想家 毕达哥拉斯 最先 在 著作 中 引入 哲学家 和 哲学 这 两个 术语 哲一词 在 中国 起源 很早 如 孔门 十哲古圣 先哲 等 词哲 或 哲人 专指 那些 善于 思辨 学问 精深 者 即 西方 近世 哲学家 思想家 之谓 在 易经 当中 已经 开始 讨论 哲学 问题 形而上学 的 中文名称 取自 易经 系辞 上传 形而上者 谓之 道 形而下者 谓之 器一语 年 日本 启蒙 家 西周 在 百 一新 论中 首先 用 汉文 哲学 来 翻译 一词 英国 哲学家 罗素 对 哲学 的 定义 是 胡适 在 中国 哲学史 大纲 中称 凡 研究 人生 切要 的 问题 从根本上 着 想要 寻 一个 根本 的 解决 这种 学问 叫做 哲学 虽然 哲学 源自 西方 的 传统 但 许多 文明 在历史上 都 存在 着 一些 相似 的 论题 东亚 和 南亚 的 哲学 被 称之为 东方 哲学 而 北非 和 中东 则 因为 其 和 欧洲 密切 的 互动 因此 常 被 视为 是 西方哲学 的 一部 份 对 哲学 的 主题 亦 存在 许多 看法 一些 人 认为 哲学 是 对 问题 本身 过程 的 审查 另外 一些 人则 认为 实质 上 存在 着 哲学 必须 去 回答 的 哲学 命题 古希腊 哲学家 透过 问 问题 来 进行 哲学 实践 他们 所提 的 问题 大概 可以 归类 为 三类 这三类 问题 分别 形成 了 哲学 的 基础学科 分别 是 形而上学 伦理学 认识论 或 知识论 哲学 可以 分为 很多 不同 的 分支 主要 包括 形而上学 知识论 伦理学 逻辑学 和 美学 很多 人类 社群 思考 过 哲学 问题 并且 互相学习 建立 了 各种 哲学流派 东方 哲学 是 通过 每个 地区 的 历史 时期 来 组织 的 西方哲学 一般 可以 分为 三个 或 更 多 时期 最 重要 的 是 古典 哲学 中世纪 哲学 和 近代 哲学 印度 哲学 的 历史 源远流长 早 在 吠陀 时代 已经 开始 至 公元前 世纪 为 全盛时期 当时 古印度 的 思想界 百花齐放 其中 最 著名 的 包括 佛教 创始人 释迦牟尼 佛 耆那教 创始人 笩 駄 摩 那 阿 耆 多 翅 舍 钦 婆罗 波拘陀迦 旃 延富兰 那迦叶 数论 派 等 中国 哲学 的 主要 部分 起源 东周时期 当时 以 诸子百家 广为人知 以 孔子 的 儒家 老子 的 道家 墨子 的 墨家 及 晚期 的 法家 为 代表 还有 一些 流派 例如 农家 阴阳家 和 名家 在 之后 则 名声 不显 在 秦朝 焚书坑儒 后 除了 法家 儒家 道家 外 其他 流派 都 不再 活跃 古希腊 哲学 是 西方哲学 的 一个 时期 时间 为 公元前 世纪 约 到 公元 世纪 它 一般 被 分为 三个 时期 前 苏格拉底 时期 柏拉图 和 亚里士多德 的 古典 希腊 时期 和 后 亚里士多德 或 希腊化 时期 有时候 会 把 新 柏拉图 主义 和 基督教 哲学家 们 的 古典 时代 晚期 加入 作为 第四个 时期 在 公元前 世纪 的 希腊 西方哲学 就 从 古代 神话 和 诗歌 中 脱颖而出 逐步 开始 对 宇宙 的 组成 以及 本源 的 思考 而 开始 了 独立 发展 前 苏格拉底 时期 的 自然 派 哲学家 们 多 关注 自然界 被 认为 是 西方 最早 的 哲学家 不管 他们 认识 以及 解释 世界 的 方式 是否 正确 但是 他们 的 想法 之所以 有别于 迷信 的 原因 在于 这些 哲学家 是 以 理性 辅佐 证据 的 方式 归纳 出 自然界 的 现象 诸如 公元前 世纪 中期 普罗泰戈 拉 和 高尔吉亚 等 所 形成 的 辩士 学派 将 研究 的 重点 由 自然 转移 到 人类 本身 认为 人才 是 万物 之 本 他们 都 不 相信 有 真正 的 存在 和 真理 普罗泰戈 拉 认为 是非 善恶 都 是 相对 于 人 的 感觉 而言 而 高尔吉亚 却 认为 所有 的 都 是 同样 的 假 这 是 怀疑论 的 雏形 公元前 世纪末 以 毕达哥拉斯 为主 的 毕达哥拉斯 学派 所 主张 的 哲学 与 前述 的 观点 既 相近 又 有 不同 罗马 古代 的 历史 上 记载 毕达哥拉斯 第一个 称 自己 为 哲学家 或者说 是 爱 智慧 他 认为 一切都是 数字 其 意思 就是说 一切 事物 的 实质 和 结构 都 是 它们 所 包含 的 数字 关系 所 决定 的 他 称 平均 秩序 和 调和 是 宇宙 的 三大 基调 并 以 音乐 的 调和 说明 宇宙 的 调和 他 所在 的 学派 将 宇宙 总结 为 十种 性质 相异 的 组合 有限 与 无限 奇 与 偶一 与 多 左 与 右 男 与 女静 与 动直 与 曲 光明 与 黑暗 善 与 恶 方与圆 至此 之后 数学 的 本质 及其 地位 一直 都 是 哲学 的 主要 问题 之一 数学 不 受 观察 和 实验 造成 的 不确定性 影响 而且 是 通过 纯粹 的 思想 加以 理解 的 其中 关于 变 与 不变 的 关系 的 争论 真实世界 与 直觉 世界 的 差别 真理 与 意见 的 矛盾 导致 产生 了 认识论 的 问题 在 古典 希腊 时期 西方哲学 方法 的 关键 特质 被 建立 依靠 诉诸 理性 和 论证 通过 一种 批判性 的 方法 来 接受 或 建立 观点 这 包括 苏格拉底 被 称为 苏格拉底 反诘 法 或 反驳 论证 方法 的 辩证法 他 主要 用 其来 检验 例如 善良 和 公平正义 的 关键 道德 概念 这种 方法 将 一个 问题 分解成 一系列 的 疑问 在 对 疑问 的 回答 中 逐步 提取 想要 找到 的 答案 其 极大 影响 可以 从 现在 使用 的 科学 方法 中 看出 在 科学 方法 中 假说 是 第一个 阶段 苏格拉底 没有 直接 教过 人 但 之后 的 柏拉图 深受 其 影响 而 其 整个 哲学思想 来源于 两大 理论 其一 永远 不要 做 坏事 其二 一个 内心 真正 善良 且 正义 的 人 绝不会 做 相反 之事 他 认为 真理 有 其 客观性 试图 推翻 智者 们 以 个人 主观 感觉 为 真理 的 思想 然后 提出 德 的 概念 以 作为 人生 行事 的 方向 对于 道德 是 什么 的 问题 苏格拉底 的 回复 为 知识 即 道德 对于 知识 是 何物 的 问题 他 回答 说 知识 是 透过 理性 而 得 的 概念 苏格拉底 开创 了 认识论 和 伦理学 如此 奠定 了 他 的 哲学 地位 古典 希腊 时期 的 的 哲学家 中 柏拉图 和 亚里士多德 对 后世 的 影响力 最大 特别 是 柏拉图 被 认为 是 西方哲学 的 创始人 哲学家 阿尔弗雷 德 诺思 怀特 黑德 评价 柏拉图 欧洲 哲学 传统 最 被 普遍 公认 的 特点 就是 它 包含 了 一系列 对 柏拉图 的 注脚 我 的 意思 不是 怀疑 学者 们 系统 体系 的 思想 是 提取 自 柏拉图 的 著作 我 暗示 的 是 那些 他们 散落 的 一般 思想 的 财富 换言之 即使 数千年 后 人们 依旧 在 试着 回答 他 所 提出 的 问题 这 也 代表 着 人们 依然 为 这些 问题 或是 这些 问题 所 延伸 的 更 多 问题 而 感到 困惑 毕达哥拉斯 的 思想 对 柏拉图 产生 了 显着 地 影响 并 通过 柏拉图 影响 了 整个 西方哲学 柏拉图 和 亚里士多德 作为 最早 的 古典 希腊 哲学家 批判 地 引用 了 其它 的 一些 智者 当时 这些 人 在 希腊 被 称为 辩士 并 在 毕达哥拉斯 之前 相当 普遍 从 他们 的 批判 看来 在 他们 的 古典 时代 一个 在 更 高尚 地 纯粹 地爱 智慧 真的 哲学家 与 那些 更 早 更 普遍 的 旅行 教师 经常 也 通过 自己 的 技艺 来 赚钱 之间 的 分水岭 之后 被 建立 亚里士多德 死后 整个 哲学 界 陷入 了 独立 时期 称为 时期 因为 整个 社会 和 政治 陷入 混乱 这 段 时期 产生 了 斯多葛 学派 和 伊壁鸠鲁 学派 以及 怀疑 主义 派 新 柏拉图 派 和 这些 学派 的 共同 特点 是 伦理化 斯多葛 学派 主要 是 顺应 自然 和 自制 伊壁鸠鲁 学派 则 是 把 快乐 作为 生活 的 本质 和善 的 标准 而 新 柏拉图 派 和 新 毕达哥拉斯 派 都 是 带有 宗教 主义 的 哲学 并 逐渐 产生 融化 基督教 和 希腊 哲学 于 一体 的 理论 即 为 后来 的 基督教 哲学 直到 公元 年 罗马 皇帝 查士丁 尼一世 尼 命令 关闭 雅典 的 柏拉图 学院 称 一些 余下 的 学院 成员 逃入 了 萨珊 王朝 首都 泰西封 中世纪 哲学 指 的 是 西欧 和 中东 在 中世纪 的 哲学体系 其 时间 范围 没有 定论 大致 上 是从 基督 化 的 罗马帝国 时期 至 文艺复兴 时期 中世纪 哲学 被 部分 定义 为 对 古典 希腊 和 希腊化 哲学 的 再 发现 和 进一步 发展 另 一部分 是 需要 解决 神学 问题 并 把 亚伯拉罕 诸教 伊斯兰教 犹太教 和 基督教 的 教条 同 世俗 知识 一同 整合 并 推广 文艺复兴 人文 学者 们 排斥 中世纪 时期 把 它 当作 在 希腊 罗马 的 古典 时代 与 古典 文化 复兴 之间 的 一个 过渡 的 野蛮 时期 然而 在 中世纪 这 将近 一千年 中 哲学 在 欧洲 仍 取得 了 长足 地 发展 认为 在 强度 复杂度 还有 成就 上 可以 确信 地说 哲学 在 十三 世纪 的 兴盛 能 与 公元前 四 世纪 古希腊 哲学 的 黄金 时期 媲美 这个 时代 讨论 的 问题 有 信仰 和 理智 的 关系 神 的 存在 与 统一 神学 话题 和 形而上学 关于 知识 宇宙 和 个人 的 问题 中世纪 的 哲学家 包括 基督教 学者 希波 的 奥古斯丁 波爱修 斯 安瑟伦 皮埃尔 阿伯拉尔 罗吉尔 培根 圣文德 托马斯 阿奎那 邓斯 司各脱 奥卡姆 的 威廉 和 让 布里 丹 等 犹太 哲学家 迈 蒙尼德 和 还有 穆斯林 哲学家 肯迪 法拉 比海什木 伊本西 那 安萨里 伊本巴 哲伊本 赫勒敦 和 伊本鲁 世德 等 中世纪 的 经院哲学 传统 一直 到 世纪 仍 在 活跃 例如 和 等 人物 其中 之 父 阿奎那 极大 地 影响 了 整个 天主教 欧洲 他 特别强调 理性 和 论证 是 最先 开始 使用 亚里士多德 形而上学 和 知识论 的 著作 的 新 译本 的 学者 之一 他 的 工作 明显 远离 了 统治 大部分 早期 经院哲学 的 新 柏拉图 主义 和 奥古斯丁 的 思想 从 文艺复兴 开始 人们 的 思想 开始 从 清净 的 僧院 走出 来到 喧嚣 的 尘世 从而 发展 自然 也 发展 人类 自身 从而 形成 人文主义 和 自然哲学 两股 既有 联系 又 有 区别 的 思潮 文艺复兴 是 对 中世纪 到 近代 之间 过渡时期 的 通称 那时 对 古典 文献 的 重新学习 帮助 把 哲学 界 的 兴趣 从 对 逻辑学 形而上学 和 神学 领域 的 钻研 转移 到 包括 道德 语言学 和 神秘主义 的 更加 广泛 的 研究 对 经典 和 人文 艺术 例如 历史学 和 文学 的 研究 在 基督教 世界 学术界 中 享有 前所未有 的 兴趣 这个 趋势 被 称为 人文主义 它 受到 柏拉图 主义 希腊 怀疑 主义 和 罗马 斯多葛 主义 的 影响 人文主义者 的 哲学 兴趣 跟随 彼特拉克 转移 到 造物主 与其 美德 上 替代 了 中世纪 时 对 形而上学 和 逻辑学 的 兴趣 那时 对 古典 哲学 的 研究 出现 了 两种 新 方式 一方面 对 亚里士多德 的 研究 因为 的 影响 而 产生 了 变化 阿威罗 伊 亚里士多德 主义者 和 更 正统 的 天主教 亚里士多德 主义者 譬如 艾尔伯 图斯 麦格 努斯 和 托马斯 阿奎那 之间 的 分歧 最终 在 文艺复兴 发展 出 一种 人文 亚里 斯多德 哲学 譬如 和 的 思想 另一方面 在 一些 之前 不 为 西欧 所 熟知 的 作品 的 重 发现 的 帮助 下 对 柏拉图 和 新 柏拉图 主义 的 研究 作为 另 一个 选择 变得 普遍 起来 著名 的 文艺复兴 时期 的 柏拉图 主义者 包括 库萨 的 尼古拉 还有 之后 的 马 尔西 利奥 费奇诺 和 若望 皮科 德拉 米兰 多拉 文艺复兴 也 重新 产生 了 对 反 亚里士多德 的 把 自然 看作 一个 有机 的 活生生 的 整体 而 不 取决于 神学 的 理论 的 兴趣 例如 在 库萨 的 尼古拉 尼古拉 哥白尼 焦尔达 诺 布鲁诺 还有 托马索 康帕内拉 的 著作 中 在 自然哲学 中 这样 的 运动 与 对 神秘主义 魔法 赫尔墨斯 主义 还有 占星学 等 兴趣 重燃相 契合 它们 被 认为 隐藏 着 收获 知识 和 掌控 自然 方法 的 大门 这些 新 的 哲学 运动 伴随 着 欧洲 宗教 和 政治 的 剧变 同时 出现 宗教改革 和 封建制 的 衰落 虽然 参与 宗教改革 的 神学家 们 对 哲学 没有 直接 的 兴趣 他们 打破 了 神学 和 知识 权威 的 传统 基础 同时 还 伴随 着 信仰主义 和 怀疑 主义 的 复兴 体现 在 伊 拉斯谟 蒙泰涅 和 等 思想家 身上 同时 民族 国家 政治 上 逐步 的 中央集权 的 过程 得到 了 世俗 政治 哲学 的 响应 如尼可 罗马 基亚 维利 常 被 描述 为 第一个 现代 政治 思想家 或者 是 现代 政治 思想 形成 的 关键点 托马斯 莫尔伊 拉斯谟 尤斯 图斯 利普 修斯 让 博丹 和 胡果 格老秀斯 等 的 著作 先秦 诸子 之后 的 两汉 经学 魏晋 玄学 等 都 是 中国 哲学 的 一部 份 自 唐朝 起 佛教 也 开始 对 哲学 产生 重要 影响 不过 中世纪 中国 哲学 最 主要 的 部分 是 宋明理学 的 发展 宋明理学 反对 汉代 后 开始 影响 儒学 的 道教 和 佛教 中 的 迷信 和 神秘 的 元素 是 一股 倡导 更加 理性 和 世俗化 儒学 的 哲学 运动 尽管 理学 遭到 道教 和 佛教徒 的 批评 理学 仍 借鉴 了 它们 两个 的 部分 术语 和 概念 然而 和 佛教 和 道教 把 形而上学 看作 心灵 发展 宗教 启示 的 催化剂 并且 是 不朽 的 不同 宋明理学 把 形而上学 当作 建立 一个 理性 的 伦理 体系 的 指导 宋明理学 的 起源 可以 追溯到 唐朝 韩愈 和 李翱 被 视为 宋代 理学 的 先驱 宋代 理学家 周敦颐 以 道教 形而上学 理论 为 框架 建立 了 他 的 伦理 哲学体系 他 被 看作 是 宋明理学 的 创始人 在 东亚 的 其他 地方 日本 哲学 形成 于 本土 的 神道 信仰 和 佛教 儒家 以及 另 一些 中国 哲学 和 印度 哲学学派 混合 发展 与 日本 类似 在 中 巫教 的 情绪化 内容 被 混合 到 了 从 中国 传入 的 理学 当中 主 条目 近代 哲学 西方 哲学史 上 的 近代 早期 一般 指 世纪 和 世纪 其中 世纪 常 被 称为 启蒙 时代 现代 哲学 不同于 其 前身 它 和 传统 权威 例如 教会 学院 亚里士多德 的 关系 更加 独立 出现 了 对 知识 基础 和 形而上学 体系 建设 的 新 兴趣 和 摆脱 了 自然哲学 的 近代 物理学 的 出现 从 世纪 开始 近代 哲学 就 以 认识论 为 研究 重点 由于 经验论 经验主义 与 唯理论 理性主义 的 争论 使 物质 与 精神 的 关系 作为 认识论 的 首要 问题 突显 出来 当时 其他 的 哲学 焦点 包括 精神 的 天性 和 其 与 身体 的 关系 新 的 自然科学 对 诸如 自由 意志 和 神 的 传统 上 属于 神学 的 话题 的 影响 和 伦理学 和 政治 哲学 的 世俗 基础 这种 潮流 最早 被 鲜明 地 体现 在 弗兰西斯 培根 的 被 称为 用来 扩展 知识 的 新 的 经验主义 的 程序 并 很快 在 笛卡儿 的 机械主义 物理学 和 理性主义 的 形而上学 中 建立 了 具有 巨大 影响力 的 形式 培根 运用 归纳法 第一个 提出 思维 的 主体 人 应该 主动 干涉 自然 来 为 人 服务 近现代 政治 哲学 的 鼻祖 托马斯 霍布斯 最早 将 这套 方法论 系统 得 应用 在 政治 哲学 上 包括 社会 契约 的 近代 理论 早期 近代 哲学 的 学术 经典 一般 包括 笛卡尔 斯宾诺莎 莱布尼茨 洛克 贝克莱 休谟 和 康德 同时 其 的 其他 思想家 也 对 哲学 做出 了 贡献 例如 伽利略 皮埃尔 伽桑狄 布莱兹 帕斯卡 艾萨克 牛顿 孟德斯鸠 托马斯 里德 让勒朗 达朗贝尔 和 亚当斯 密而 让 雅克 卢梭 是 反 启蒙运动 的 开创性 人物 早期 近代 哲学 的 大致 结束 通常 被 确定 为 伊曼 努尔 康德 的 试图 限定 形而上学 范围 证明 科学知识 并用 道德 和 自由 来 调和 两者 的 体系 理性主义 者 中 勒内 笛卡儿 认为 物质 世界 是 由 数学 关系 组成 的 单一 体系 他 企图 将 物理学 转化 为 数学 他 在 其 著作 中 对 整个 经院哲学 以及 在 他 那个 时代 流行 的 教育 与 哲学体系 加以 讽刺 其 认为 我思 故我在 是 认识论 的 无可 怀疑 之 出发点 笛卡尔 是 割裂 精神 和 物质 的 二元论 者 为了 厘清 二者 关系 他 坚定 认为 在 上帝 那里 精神 和 物质 是 统一 的 其 理论 被 称为 斯宾诺莎 是 笛卡尔 之后 又 一位 著名 的 唯理论 者 他 的 认识论 几何学 和 机械 观都 来自 于 笛卡尔 但 他 不 认同 笛卡尔 的 二元论 认为 精神 和 物质 不过 是 唯一 实体 的 两种 属性 莱布尼茨 作为 唯理论 者 坚定 地 维护 笛卡尔 的 学说 并 反驳 约翰 洛克 的 理论 与 笛卡尔 不同 的 是 他 认为 万物 的 实体 是 单子 且 互相 没有 关系 而是 由于 前 定 和谐 才 共存 一体 即 存在 于神 之中 前 定 和谐 调和 了 笛卡尔 之 二元论 和 斯宾诺莎 之 实体 双重性 洛克 发展 了 经验论 他 不 认同 笛卡尔 的 天赋 观念 提出 白板说 他 强调 人们 从 感觉 中 抽象 出 普遍 的 概念 认为 感觉 中 的 个别 东西 才 是 第一位 的 不过 他 基本 认同 笛卡尔 的 二元论 贝克莱 发展 了 洛克 的 哲学理论 提出 了 存在 就是 被 感知 他 认为 除了 感知 的 主题 和 被 感知 的 知觉 之外 什么 也 没有 他 非常 不 赞同 物质 的 抽象概念 认为 其 既 无 客观实在 也 不能 存在 于 人心 大卫 休谟 的 理论 比 贝克莱 的 更进一步 他 不仅仅 认为 物质 实体 不 存在 更 认为 精神 实体 不 存在 只 承认 知觉 的 存在 他 还 以 自己 的 不可知论 和 怀疑论 认为 不 存在 统一性 和 普遍性 的 东西 认定 多样性 和 个别性 才 是 最高 原理 经验论 与 唯理论 的 争论 也 包含 了 唯物主义 与 唯心主义 的 争论 在 世纪 时 法国 的 拉美特利 公开 宣布 唯物主义 是 唯一 的 而 百科全书 的 主编 德尼 狄德罗 也 拒绝 承认 神 的 存在 另外 伏尔泰 孟德斯鸠 和 其他 百科全书 派 的 学者 都 有 涉及 政治 和 伦理 领域 他们 都 认为 机械主义 才 是 最终 形式 物质 是 唯一 的 且 处于 永恒 运动 的 精神 只是 人脑 的 属性 因此 他们 认为 无机物 与 有机物 不可逾越 人 的 思维 是 人 感官 的 结果 不过 他们 仍然 是 经验 主义者 在 因果性 上 他们 认为 只有 必然性 才 是 唯一 的 这 就 成为 唯心主义 的 观念 从 世纪 中后期 开始 直到 世纪 初 哲学 便 进入 了 近代 哲学 的 总结 时期 这 就是 德国 古典 哲学 时期 有 两条 线索 标志 着 转折 的 到来 一 思维 与 存在 的 关系 更加 明确 二 产生 了 系统 辩证法 其 代表 人物 有 康德 费希特 谢林 黑格尔 等 康德 给 哲学 带来 了 三个 标志性 的 创造 他 受到 休谟 的 诸多 影响 并 为 西方哲学 带来 一次 革命 他 认为 哲学 的 研究 核心 就是 规定 理性 能 做 什么 以及 不能 做 什么 康德 同意 休谟 的 理论 并 认为 存在 一些 原则 使得 心灵 对 经验 和 认识 加以 组织 而 证据 皆 可以 在 数学 中 找到 即 是 包含 在 命题 里 的 要 比 包含 在 原是 概念 的 定义 要 多得多 他 使用 称之为 批判 哲学 的 先验 方法 来 展现 经验 的 某些 范畴 和 形式 都 必然 地被 预先 存在 与 人们 一切 言谈 之中 凭借着 他 的 三部 批判性 的 著作 为 先验 方法 作出 相应 的 结构 他 还 为 道德哲学 奠定 了 新 基础 且 他 赋予 了 自由 概念 的 新 意义 因为 其 影响 在 现代 依旧 尚存 其 理论 被 人们 称为 康德 主义 费希特 本来 承认 斯宾诺莎 的 机械 的 因果 决定论 但 后来 受到 康德 的 影响 开始 认为 因果 决定论 只是 表面 其实质 为 自我 不是 必然性 的 奴仆 而是 独立 自由 的 主体 就此 他 建立 了 主观 的 思维 与 客观 的 存在 之 统一 说 谢林 是从 费希特 理论 出发 的 但 深受 斯宾诺莎 和 文学 上 浪漫主义 的 影响 创立 了 自己 的 学说 即 他 认为 自然 和 精神 存在 和 思维 客体 和 主体 表面 相反 实则 统一 是 同一个 绝对 的 不同 发展 阶段 这个 绝对 即 是 万事万物 的 根源 他 认为 艺术 才 是 最 直观 的 理性 黑格尔 及其 理论 的 出现 将 西方哲学 的 推上 一个 新 高度 他 创立 了 西方 哲学史 上 最 庞大 的 客观唯心主义 体系 并 系统地 阐述 了 辩证法 他 的 理论 和 学说 对 近现代 哲学 产生 了 很 深远 的 影响 并 被 称为 黑格尔 主义 从 黑格尔 的 思想体系 中 发展 而成 的 多种 哲学 运动 其 重点 就是 以 历史 和 逻辑 为主 历史 方面 它 从 不同 角度 理解 凡是 合理 的 就是 现实 的 逻辑 方面 它 有 发现 其中 所说 的 真理 即使 整体 黑格尔 认为 哲学 的 重点 是 放弃 分裂 达到 统一 他 把 以前 的 时代 说成 是 思维 与 存在 理想 与 现实 分裂 自由 与 必然 个人 与 社会 无限 与 有限 统一性 与 多样性 分裂 之 时代 他 从 康德 的 心灵 的 合理性 以及 在 经验 中 的 积极 作用 的 概念 出发 但 反对 康德 的 超越 经验 世界 和物 自身 的 世界 并 认为 心灵 和 世界 一样 具有 相同 基础 理性 结构 他 所 认为 的 普遍性 不是 脱离 特殊 的 抽象 普遍 而是 包含 特殊 在内 之 普遍 即 为 具体 普遍 他 所 认为 的 统一 也 非 脱离 矛盾 对立 的 抽象 统一 而是 包含 它们 在内 的 统一 即 为 对立统一 上述 综合 在 一起 即 是 他 的 理论 最 真实 的 无所不包 的 整体 即 是 绝对 精神 又 是 对立 的 统一 他 认为 为了 达到 这个 绝对 精神 需要 经过 三个 阶段 从 逻辑 自然 到 精神 即 是从 思维 到 存在 再 到 两者 统一 的 过程 从而 完成 他 的 统一论 就此 社会 和 历史 的 现象 便 被 赋予 一种 在 哲学史 上 还是 崭新 的 显赫 地位 他 还 将 伦理学 划归 到 这个 领域 从而 在 伦理学 理论 和 对 思想 的 理解 中 提出 重要 的 路线 从 世纪 中叶 开始 西方哲学 就 进入 现代 哲学 阶段 因为 在 世纪 中期 欧洲 的 工业革命 几近 完成 现代 哲学 特别 是 世纪 中后期 的 哲学流派 有 叔本华 的 意志 主义 新康德 主义 新 黑格尔 主义 马克思主义 世纪 的 西方哲学 上 主流 有 两条 现代 哲学 主要 包含 以下 几种 潮流 历程 哲学 主流 马克思主义 西方 马克思主义 革新 的 黑格尔 主义 结构主义 分析 哲学 实证主义 新康德 主义 逻辑 实证主义 语言 哲学 现象学 唯物论 新 托马斯 主义 科学 哲学 意志 主义 实用主义 存在主义 解释学 唯心主义 的 各种 变体 在 世纪 晚期 至 世纪 早期 的 哲学 界 相当 流行 康德 主张 的 先验 唯心主义 认为 人们 对 事物 的 理解 是 有 界限 的 因为 在 客观 判断 条件 下 很多 事情 是 办不到 的 他 在 年 发行 的 作品 纯粹 理性 批判 试图 调和 世纪 两大 主要 的 哲学 派别 经验主义 和 理性主义 并且 建立 一个 研究 形而上学 的 新 基础 德国 唯心主义 最 著名 的 作品 是 黑格尔 于 年 出版 的 精神 现象学 黑格尔 承认 自己 的 理念 不是 新 的 不过 他 的 目标 是 完成 之前 的 哲学家 们 的 不 完整 的 体系 黑格尔 认为 哲学 的 重点 是 放弃 分裂 达到 统一 他 把 以前 的 时代 说成 是 思维 与 存在 理想 与 现实 分裂 自由 与 必然 个人 与 社会 无限 与 有限 统一性 与 多样性 分裂 之 时代 他 从 康德 的 心灵 的 合理性 以及 在 经验 中 的 积极 作用 的 概念 出发 但 反对 康德 的 超越 经验 世界 和物 自身 的 世界 并 认为 心灵 和 世界 一样 具有 相同 基础 理性 结构 他 所 认为 的 普遍性 不是 脱离 特殊 的 抽象 普遍 而是 包含 特殊 在内 之 普遍 即 为 具体 普遍 他 所 认为 的 统一 也 非 脱离 矛盾 对立 的 抽象 统一 而是 包含 它们 在内 的 统一 即 为 对立统一 上述 综合 在 一起 即 是 他 的 理论 最 真实 的 无所不包 的 整体 即 是 绝对 精神 又 是 对立 的 统一 黑格尔 认为 需要 经过 三个 阶段 来 达到 这个 绝对 精神 从 逻辑 自然 到 精神 即 是从 思维 到 存在 再 到 两者 统一 的 过程 从而 完成 他 的 统一论 他 还 将 伦理学 划归 到 这个 领域 从而 在 伦理学 理论 和 对 思想 的 理解 中 提出 重要 的 路线 马克思主义 哲学 是 卡尔 马克思 和 恩格斯 建立 的 以 辩证唯物主义 为 核心 的 哲学体系 其 认为 实践 是 检验 哲学 之 真理性 的 最终 标准 哲学 应 伴随 着 社会 科学技术 和 文化 的 发展 而 不断 发展 其 主要 思想体系 在 世纪 年代 主要 由 恩格斯 创立 世纪 年代 在 苏联 形成 完整 体系 辩证唯物主义 和 历史唯物主义 这个 体系 在 后来 的 社会主义 国家 推动 下 得以 发展 马克思主义 哲学 宣称 自己 的 理论体系 具有 科学性 认为 哲学 可以 成为 科学 的 一部分 同时 马克思主义 哲学 认为 哲学 还 具有 意识形态 的 性质 另外 马克思主义 在政治上 也 指 各种 不同 的 共产主义 运动 如由 列宁 所 创立 而 被 斯大林 修改 的 苏联 马克思主义 称为 马克思列宁主义 为 俄国 革命 以及 后来 建立 的 各种 共产党 之 教义 它 的 旁系 包括 反 斯大林 的 托洛茨基 及其 追随者 的 马克思主义 毛泽东 的 马克思列宁主义 等 实用主义 产生 于 世纪 年代 的 现代 哲学 派别 在 世纪 的 美国 成为 一种 主流 思潮 对 法律 政治 教育 社会 宗教 和 艺术 的 研究 产生 了 很大 的 影响 实用主义 也 试图 在 理性主义 及 经验主义 找出 一条 中间 道路 来 是 经验主义 思想 方法 与 人类 的 比较 具有 宗教性 需要 的 适当 的 调和 者 现象学 是 由 德国 哲学家 胡塞尔 在 年 提出 的 理论 强调 对 直接 直观 和 经验 感知 的 区分 认为 哲学 或 至少 是 现象学 的 主要 任务 是 厘清 二者之间 的 关联 并且 在 直观 中 获得 对 本质 的 认识 存在主义 是 一个 哲学 的 非 理性主义 思潮 该 术语 被 用 在 十九世纪 晚期 到 二十世纪 的 一些 哲学家 的 工作 上 尽管 他们 的 学说 相差 巨大 但 他们 都 相信 哲学 思考 开始 于 人类 主体 不仅仅 是 思维 主体 而且 包括 行为 感知 人类 个体 存在主义 强调 个人 独立自主 和 主观 经验 认为 人 存在 的 意义 是 无法 经由 理性 思考 而 得到 答案 在 存在主义 中 个体 的 出发点 的 特征 是 被 称为 存在 的 态度 或 一种 面对 显然 是 一个 无 意义 的 或 荒谬 的 世界 的 迷失 和 混乱 的 感觉 很多 存在 主义者 还 认为 传统 的 体系 和 哲学 学术 无论是 内容 和 风格 都 过于 抽象 并 远离 人类 经验 世纪 哲学家 克尔凯 郭尔 和 尼采 被 看作 存在主义 的 先驱 尽管 他们 没有 使用 这个 术语 然而 他们 的 影响 延伸 出 了 存在主义 思想 克尔凯 郭尔 著作 主要 针对 的 是 黑格尔 的 唯心主义 哲学体系 他 认为 其 忽视 或 排除 了 人类 的 内在 主观 生命 相反 克尔凯 郭尔 认为 真理 是 主观 的 主张 对 一个 现实 的 人类 来说 最 重要 的 问题 是 处理 个人 与 存在 内在 关系 的 问题 克尔凯 郭尔 作为 一个 基督徒 相信 宗教信仰 的 真相 是 一个 主观 问题 而且 人 应该 用 热情 去 深思 这个 问题 3 | 文学 文学 是 指以 语言文字 为 工具 形象化 地 反映 艺术 包括 戏剧 诗歌 小说 散文 等 是 文化 的 重要 表现形式 以 不同 的 形式 称作 体裁 表现 内心 情感 和 再现 一定 时期 和 一定 地域 的 社会 生活 文化 文学 并不一定 是 客观 的 一名 成功 的 文学家 能 在 自己 的 文学作品 中 展现 自己 对于 文学 的 主观 看法 抒发 自己 的 情绪 和 感触 但 藉由 尝试 建立 一个 客观 的 标准 有时 对能 帮助 作家 了解 读者 的 感受 以求 将 内心 之 情感 与 艺术 表现 完整 的 体现 在 读者 心中 有时 也 能 藉此 作家 的 主观 想法 带给 社会 不同 面相 省思 现况 例如 女性 文学 的 兴起 文学 的 历史 和 文明 发展 有 密切 的 关系 若 将 文学 定义 为用 文字 记录 的 作品 最早 的 古代文学 作品 一般 认为 是 古埃及 文学 及 古埃及 文学 中 主要 的 文类 赞美诗 祈祷文 及 故事 几乎 都 是 以 诗 的 方式 写成 的 不过 虽然 可以 清楚 看出 有 使用 诗歌 技巧 但 诗歌 的 不明 最早 已知 的 文学作品 是 公元前 年 一篇 由 苏美人 创作 的 吉尔伽 美什 史诗 当中 描述 英雄主义 友谊 损失 及 追逐 永生 不同 的 历史 时期 有着 不同 特色 的 文学 古代 的 文学 中有 许多 有关 世界 起源 及 习俗 起源 内容 也 有 一些 其中 有 道德 及 灵性 意涵 的 神话 铁器时代 的 荷马史诗 及 以 较晚 一些 的 有 较 多 有关 作者 的 资讯 而 许多 的 神话 则 是 用 口头 传播 的 方式 流传 下来 各种 文学 都 可以 视为 是 文字 的 纪录 文学 本身 可能 是 写实 或是 虚构 但 都 可以 描绘出 一些 事实 例如 主角 的 动作 及 言语 作者 的 写作 风格 以及 文字 后 的 含义 等 这些 情节 不 只是 娱乐性 的 其中 也 包括 了 经济 心理 科学 宗教 政治 文化 及 社学 的 相关 资讯 在 学习 历史 时 研究 及 分析 当时 的 文学 也 是 重要 的 一部 份 研究 过去 的 文学 可以 看到 不同 历史 时期 时其 社会 和 社会规范 的 演变 甚至于 也 可 助于 瞭解 现今 的 文学 因为 其中 常常 引用 古希腊 神话 宗教 典藉 及 相关 文献 的 资料 人们 不止 可以 从 各 主题 相关 的 文学 中 看到 该 主题 随着 历史 的 演进 例如 从 经济史 的 书 或 介绍 科学 及 演化 的 书 甚至 连 科幻小说 中 都 可 看到 类似 的 内容 作者 常常 在 其 作品 中 加入 一些 历史 的 内容 例如 拜伦 勋爵 在 中 藉由 主角 提到 西班牙文 及 法文 也 提到 作者 的 一些 想法 藉由 文学 人们 可以 继续 的 发现 有关 历史 的 新 资讯 这个 从 各个 学科 领域 都 有 和 文学 相关 的 子 领域 可以 看出 当 人们 将 资讯 用 文字 的 方式 纪录下来 就 比较 容易 从 这 一代 流传 到 下一代 留下来 的 资讯 会 越来越 多 从 这些 资料 人们 可以 研究 文学 提升 想法 扩展 知识 也 可以 开始 像 医学 或是 贸易 等 专业 领域 的 研究 而 随着 现代 人们 学习 内容 的 增加 及 拓展 文学 也 会 有 一些 不同 成为 以后 人们 研究 的 基础 许多 古文明 都 有 其 对 哲学 或是 相关 观点 的 文学 像是 古 中国 古印度 波斯 时及 希腊 罗马 古典 时代 的 作品 许多 古代 的 作品 就算 是 叙事 的 形式 都 还是 有 道德 或是 教诲 上 的 目的 像 梵语 的 五卷 书 或是 奥维德 的 变形记 后来 戏剧 及 讽刺作品 的 受众 也 变多 因此 也 开始 有 类似 性质 的 文学创作 抒情诗 常常 是 贵族 圈 的 特性 产物 特别 在 东亚 许多 歌曲 被 贵族 收集 成为 诗歌 浪漫主义 的 异常 特质 在 中世纪 绽放 同时 理性 时代 造就 了 民族主义 史诗 与 哲学 短文 浪漫主义 强调 通俗 的 文学 及 情感 的 投入 慢慢 被 寻求 真实 的 现实主义 与 自然主义 文学所 取代 到 了 世纪 象征主义 抬头 探索 角色 的 描述 和 发展 在 很长 一段时间 中国 的 文学 与 史学 和 神话 并 无 明显 的 界限 最早 的 文学 是 对 历史 和 神话 的 记录 但 纯粹 的 文学 早 在 周时 就 已 出现 例如 诗经 中国 古代 的 文学 主要 着重 在 哲学 史学史 军事学 农业 及 韵文 中国 发明 了 造纸术 及 雕版 印刷 也 是 世界 上 第一个 中国 的 许多 哲学思想 是 起源 自 春秋战国 时 的 诸子百家 其中 最 重要 的 有 儒家 道家 墨家 及 法家 而 军事学 书藉 如 孙子兵法 也 是 在 春秋战国 时 开始 出现 中国 历史 文学 则 从 尚书 春秋 战国策 史记 等 一直 延续 下来 而且 有 很 详细 的 资料 记录 中国 的 文学 成就 最大 的 是 诗歌 从 离骚 到 唐代 律诗 诗歌 一直 对 中国 文坛 有着 巨大 的 影响 后来 诗词 曲 小说 等 文学 形式 分别 在 唐宋元 明清 达到 高峰 民国时期 由 胡适 和 陈独秀 推动 的 新文学运动 认为 作品 不应 只 讲求 形式 应 注重 内容 的 充实 表达 及 情感 也 推动 白话文学 民国时期 武侠小说 风靡 海内外 成为 当时 最 受欢迎 的 通俗小说 中华人民共和国 时期 在 文化大革命 后 出现 相关 的 反思 文学 及 伤痕 文学 也 有 一批 白话文 诗人 进行 大量 创作 也 取代 古诗 成为 当时 最 欢迎 的 诗歌 作品 后来 网路 文学 兴起 成为 受欢迎 的 商业 作品 中华民国 在 撤退 台湾 后 在 及 年代 出现 了 以 四大 抗战 小说 为 代表 的 战斗 文艺 小说 都 是 以 抗战时期 为 背景 后来 又 有 反共 文学 的 出现 而 年代 开始 以 琼瑶 为 代表 的 言情小说 也 开始 行 年代 起 逐渐 开始 有 对于 台湾 社会 研究 的 新 现代文学 以及 强调 乡土 的 乡土 写实 文学 年 后 也 开始 了 网路 文学 的 兴起 中国 古典文学 分为 诗 和 文文 又 分为 韵文 和 散文 中国 的 抒情诗 和 散文 称为 古文 最早 而 比较发达 文学 一般 分为 诗歌散文 小说 戏剧 并 称为 四大 文学 体裁 其他 的 文学 体裁 如下 有 许多 的 文学奖 颁发 给 优秀 的 作家 表扬 其 文学 的 成就 因为 文学 的 范围 很广 许多 文学 奖项 会 依 风格 文学 类型 语言 国藉 及其 他 特性 例如 新进 作家 或是 等 再 做 分类 诺贝尔文学奖 是 依 诺贝尔 在 年 的 遗嘱 所 成立 的 奖项 是 诺贝尔奖 中 的 一项 一般 是因为 作者 的 整体 作品 而 获奖 而 非 着重 特定 的 作品 其他 不分国 藉 的 奖项 有纽 斯塔特 国际 文学奖 布克 国际奖 及 卡夫卡 奖是 文学 创作者 应用 在 文学 中 制造 特别 效果 的 方式 文学 技巧 的 范围 很广 包括 作品 是否 要 用 第一人称 或是 其他人 称用 传统 的 线性 叙事 或是 或是 文类 选择 都 包括 在内 这 可以 让 读者 感受 到 一些 熟悉 的 结构 及 架构 例如 传统 犯罪 小说 不过 有些 作者 会 特别 选择 一些 文学 技巧 来 让 读者 有 意外 的 感受 文学 技巧 的 使用 也 可能 会 产生 新 的 文类 就 像 塞缪尔 理查森 写 的 早期 现代 小说 一 様 是 用 许多 的 信件 组成 称为 书信体 技巧 因此 让 大家 再次 注意 到 一个 以往 曾 出现 但 没有 这么 受 注意 的 文类 文学 技巧 和 文学 手段 不同 有点 类似 军事战略 和 军事 战术 之间 的 关系 文学 手段 是 在 叙述 中用 的 特殊 结构 像是 隐喻 明喻 省略 叙事 及托寓 等 甚至 单纯 的 谐音 都 可以 作为 文学 手段 也 可以 视为 是 文学 手段 例如 意识流 叙事 文学批评 是 指 文学 批评者 对 其他人 作品 的 评论 和 评估 有时 也 会 用来 改进 及 提升 文学作品 也 可以 对 作者 带来 类似 的 作用 有 许多 不同 种类 的 文学批评 背后 会 有 其 理论 基础 不同 种类 的 文学批评 可以 评论 文学作品 的 各个 部份 或是 各个 层面 4 | 历史 历史 现代汉语 词汇 古典 文言文 称之为 史指 人类 社会 过去 的 事件 和 行动 以及 对 这些 事件 行为 有 系统 的 记录 诠释 和 研究 历史 可 提供 今人 理解 过去 作为 未来 行事 的 参考 依据 与 伦理 哲学 和 艺术 同属 人类 精神文明 的 重要 成果 历史 的 第二个 含义 即 对 过去 事件 的 记录 和 研究 又称 历史学 或 简称 史学 隶属于 历史学 或 与其 密切相关 的 学科 有 年代学 编纂 学 家谱 学 古文字学 计量 历史学 考古学 社会学 和 新闻学 等 参见 历史学 记录 和 研究 历史 的 人 称为 历史学家 简称 史学家 中国 古代 称为 史官 记录 历史 的 书籍 称为 史书 如 史记 汉书 等 粗 分为 官修 与 民载 两类 广义 的 历史 泛指 一切 事物 的 发展 过程 包括 自然史 和 社会史 不 一定 同 人类 社会 发生 联系 在 哲学 上 这种 含义 下 的 历史 称为 历史 本体 例如 宇宙 历史 地球 历史 鸟类 历史 中国 历史 世界 历史 等等 通常 仅指 人类 社会 的 发展 过程 它 是 史学 研究 之 对象 一般说来 关于 历史 的 记述 和 阐释 也 称为 历史 而 狭义 的 历史 则 必须 以 文字 记录 为 基础 即 文字 出现 之后 的 历史 才 算 历史 在此之前 的 历史 被 称为 史前史 又 可以 称为 人类史 或 社会史 而 脱离 人类 社会 的 过去 事件 称为 自然史 一般来说 历史学 仅仅 研究 前者 即 社会史 历史 的 含义 在 中文 中 最早 仅用史 一字来 代表 甲骨文 中史 字 与 事 相似 指 事件 许慎 说文解字 说 史记 事者 也 从 又 持中 中正 也 便 指出 史 的 本意 即 记事 者 是 一人 执中 之象 近人 金静 庵 说 保藏 之 档案 谓 之中 持中 之 人 谓之 史一 指书言 一 指人言 由此 引申 则 代表 被 史官 被 纪录 的 事 换句话说 即 所有 被 文字 纪录 的 过去 事情 研究 史 的 学问 称 史学 历史 一词 出现 较晚 在 三国志 裴松之 注中 首次 提到 历史 二字 南齐书 中 也 提到 这个 名词 是 历代 史书 之意 明代 嘉靖 年间 李廷机 与 叶向高 编辑 历史 大方 通鉴 是 中国 第一本 以 历史 二字 为名 的 书 袁 了 凡 为此 书写 的 历史 纲鉴 补引 解释 历史 是 指 诸史 也 就是 历代 史书 之意 年 礼部 侍郎 于式 枚 在 奏章 中 提到 历史 这个 名词 将 它 作为 历史 事件 之意 年 皮锡瑞 经学 历史 出版 其中 的 历史 二字 也 明确 将 它 定位 为 历史 事件 之意 因此 在 年代 前后 历史 这个 名词 在 中国 开始 被 明确 当作 历史 事件 来 使用 明治维新 后 日本 学者 为 翻译 译 为 历史 二字 使 其 成为 对应 词 年代 成为 流行 用语 年 光绪皇帝 接受 吏部 尚书 张百熙 建议 颁布 钦定 学堂 章程 其中 寻常 小学 课目 中有 史学 舆地 二项 张百熙 派 吴汝纶 赴 日本 考察 教育 后 年 负责 教育 改革 的 张百熙 张之洞 荣庆向 皇帝 建议 重订 学堂 章程 在 重订 章程 后 寻常 小学 依 日本语 改称 初等 小学 而 史学 舆地 二科则 改称 历史 地理 之后 历史 这个 名词 在 中国 流行 在 欧美 多数 语言 的 历史 一 词源 出自 原义 为 调查 探究 知识 古希腊 作家 希罗多德 的 历史 一书 以此 为名 对于 历史 的 含义 和 性质 有 很 多种不同 的 诠释 以下 列举 其中 一些 历史 并 不是 归类 于 人文科学 或 社会科学 中 而是 其间 的 桥梁 合并 了 两大 领域 的 研究 方法 一般来说 史学家 通过 研究 各种 书面 文字 但 并 不 局限于 此 努力 并 尝试 解答 和 历史 有关 的 问题 历史 知识 的 原始 资料 分为 三种 文字 记载 的 口头 流传 的 保留 下来 的 历史 遗迹 通常 历史学家 会 综合 三种 方法 进行 研究 而 文字 记载 经常 被 作为 强调 的 重点 因为 它 普遍 纪录 了 发展 的 时间 这种 强调 引申 出 了 一个 新 领域 史前史 也 可 称为 史前 学 研究 的 是 没有 书面 纪录 的 那 一个 时期 由于 世界各地 文字 出现 的 时间 各不相同 所以 史前史 和 历史 的 主要 区别 是 根据 具体 的 论题 而 决定 学者 们 为了 易于 研究 根据 过去 人类 的 范围 将 其 划分 为 不同 的 阶段 划分 过去 的 方法 繁多 包括 按 年代 分类 按 文化 习俗 分类 按 不同 主题 分类 这 三种 分类 经常 会 有 重叠 比如 阿根廷 的 劳工 运动 的 演变 尽管 历史 研究 倾向 于 一些 专门 的 地点 时间 和 主题 历史学家 也 同时 会 关心 其他 普通 的 一些 内容 而 对于 其他人 来说 历史 已经 成为 一个 非常 普通 的 词语 就是 研究 过去 人类 的 所有 事情 甚至于 现在 更 兴起 了 一门 所谓 的 广义 历史 过去 研究 历史 都 是 为了 应用 或者 理论 的 目的 而 现在 还 多 了 一条 那 就是 对 人类 过往 的 好奇 以 历史 为 认识 对象 所 形成 的 一门 学问 叫 史学 或 历史学 也 可以 用 历史 一词 代表 历史学 的 本质 其实 是 把 实际 发生 的 事件 转换成 以 意念 和 文字 形式 存在 的 历史 的 过程 和 方法 关于 历史学 的 目的 和 方法 的 研究 探讨 在 西方 属于 历史 哲学 的 范畴 历史 哲学 的 出现 和 发展 意味着 历史学 从 单纯 的 历史纪录 发展 成为 对 历史 的 解释 和 对 历史 规律 的 探求 阶段 一 开始 历史 哲学 仅仅 关心 如何 改进 历史 研究 的 方法 但 认为 被 研究 和 记录 的 历史 就是 真实 的 历史 在 新康德 主义 和 新 黑格尔 主义 的 影响 下 人们 对 自身 的 认识 过程 有 了 重新 的 理解 哲学家 开始 重新 定义 历史学 意大利 哲学家 克罗齐 提出 一切 真 历史 都 是 当代史 的 命题 认为 往事 只有 在 当代人 生活 中 发挥作用 才 成为 历史 否则 是 死 的 历史 即 编年史 因此 同样 的 历史 在 不同 的 时期 会 被 不断 的 改写 英国 哲学家 柯林 武德 又 进一步 认为 一切 历史 都 是 思想史 即 历史 是 历史学家 思想 的 反映 不仅 因 时代 而异 也 因人而异 而 唯物主义 的 历史观 认为 历史 事件 是 客观存在 的 历史 则 是 历史学家 主观 对 客观 的 历史 事件 的 认识 由于 人 主观 的 局限性 对 客观 的 历史 事件 的 认识 是 有限 的 主观 的 认识 不能 完全符合 客观 的 历史 因此 只有 不断改进 逐渐 逼近 这一 过程 同 自然科学 的 过程 一致 这种 历史学 称为 历史 科学 世界 历史 是 世界各地 人类 过去 经验 的 总和 而且 这些 经验 主要 是 透过 文字 的 方式 保存 下来 相对而言 史前 是 指一 地区 已有 人类 产生 但 还 没有 出现 文字 的 时代 藉由 研究 当时 的 绘画 素描 雕刻 或 其他 工件 可以 在 没有 文字 记录 的 情形 下 得到 一些 当时 的 资讯 自从 二十世纪 起 研究者 开始 重视 史前 的 研究 以免 历史 研究 隐性 的 排除 一些 特定 的 文明 例如 撒哈拉 以南 非洲 及前 哥伦布 时期 的 美洲 在 西方 的 历史学家 不成比例 的 专注 在 西方 世界 的 研究 年 时 英国 历史学家 爱德华 霍 列特 卡尔 认为 此 定义 下 的 历史 也 包括 一些 当时 没有 文字 记录 但 对 历史 有 强烈 兴趣 的 民族 像 在 和 欧洲人 接触 之前 的 澳大利亚 原住民 及 纽西兰 的 毛利人 虽 没有 文字 记录 但用 口传 历史 的 方式 将 历史 传给 下一代 中国 是 世界 上书 载 历史 的 传承 最 完备 的 国家 其 对 历史 的 记录 不仅 时间 长 而且 内容 精确 详细 中国 历史 自 传说 中 的 黄帝 以来 已经 有 千多年 而 自 西周 共和 时代 前年 以来 历史记录 精确 到 年 自鲁隐 公元 年前 年 以来 则 精确 到 月 日 中国 的 历史记录 也 被 称为 史 或 史书 分为 编年体 纪传体 纪事 本末 体等 不同 体裁 与 西方 文明 中 的 历史学 不 占据 主流 地位 相反 中国 将史 列为 四种 基本 学科分类 经史子集 之一 清 纪晓岚 等 四库全书 魁奈说 历史学 是 中国 人 一直 以其 无 与 匹伦 的 热情 予以 研习 的 一门 学问 没有 什么 国家 如此 审慎 地 撰写 自己 的 编年史 也 没有 什么 国家 这样 悉心 地 保存 自己 的 历史 典籍 原始社会 中 人类 没有 文字 只能 通过 诸如 结绳记事 和 口传 等 方法 作 记录 一些 历史 的 痕迹 通过 传说 保存 了 下来 例如 中国 上古 传说 黄帝 战 蚩尤 女娲补天 大禹治水 等 国家 出现 后 则 开始 有 掌管 祭祀 的 巫 他们 同时 兼任 记录 时事 起草 公文 和 掌管 文书 等 相关 职能 可以 说 是 最早 的 史官 之后 随着 国家 职能 的 不断 演进 与 发展 出现 了 职能 独立 的 史官 专门 记录 历史 事件 掌管 典籍 在 这个 时期 中国 出现 了 世界 上 最早 的 史书 尚书 内容 是 历代 政治 文件汇编 并 无 特定 的 历史记录 体裁 从 西周 共和元年 公元前 年 起 中国 有 了 按 年 记载 的 编年史 从此 有 了 连续不断 的 历史纪录 而且 差不多 每年 都 有 史可查 这 在 世界 各国 范围 内 也 是 极其 罕见 的 春秋战国 时期 的 史学家 如 孔子 编订 春秋 和 左丘明 着 左传 等 重视 人类 社会活动 从而 使 历史 基本 摆脱 了 神学 和 宗教 的 影响 西汉时 司马迁 撰写 了 史记 创建 了 纪传体 的 历史记录 体裁 史记 的 规模 在 当时 世界 范围 内 是 空前 的 之后 东汉 班固 着 汉书 延续 发展 了 史记 的 体例 是 中国 第一部 纪传体 断代史 这 两部 历史 著作 奠定 了 中国 古典 史学 的 基础 后来 的 历史学家 沿用 史记 和 汉书 的 体裁 将 各个 朝代 的 历史 汇编 成书 组成 了 二十四史 除 断代史 之外 唐宋 期间 中国 还 出现 了 通史 如 唐末 杜佑 的 通典 宋司马光 的 资治通鉴 其中 资治通鉴 是 叙事 长 达 一千三百六十二年 的 编年体 通史 是 中国 史学史 上 的 奇葩 西方 的 历史学 开始 于 公元前 世纪 古希腊 作家 希罗多德 在 历史 又名 希波 战争史 一书中 记录 了 希腊 与 波斯 之间 的 希波 战争 历史 从此 自 神话 和 文学 中 脱离 出来 成为 独立 的 学科 希罗多德 也 因此 被 罗马 哲学家 西塞罗 称为 史学 之父 但 希罗多德 的 记录 中 真实 事件 与 虚构 事件 混杂 并 不是 纯粹 的 历史 多年 后 古希腊 人 修昔底 德所 着 的 伯罗奔尼撒 战争史 治学 态度 严谨 历史 记载 翔实 才 是 西方 第一部 信 史前 世纪 希腊 历史学家 波里 比 阿 在 通史 又名 罗马 史中 记录 了 前年 至 前年 年间 罗马帝国 周围 地中海 沿岸 各国 各 民族 的 历史 是 第一部 世界 通史 历史 哲学 是 哲学 的 一个 分支 主要 考虑 人类 历史 的 最终 意义 更进一步 的 它 考虑 人类 历史 的 可能 的 目的论 的 结局 换句话说 它 追问 人类 历史 的 过程 中 是否 存在 着 一个 设计 目的 指导 原则 或是 定局 史学方法 由 历史学家 在 使用 第一手 资料 和 其他 证据 来 研究 并 书写 历史 时所 遵循 的 技巧 和 原则 5 | 计算机科学 计算机科学 有时 缩写 为 是 系统性 研究 信息 与 计算 的 理论 基础 以及 它们 在 计算机系统 中 如何 与 应用 的 实用技术 的 学科 它 通常 被 形容 为 对 那些 创造 描述 以及 转换 信息 的 算法 处理 的 系统 研究 计算机科学 包含 很多 分支 领域 有些 强调 特定 结果 的 计算 比如 计算机 图形学 而 有些 是 探讨 计算 问题 的 性质 比如 计算 复杂性 理论 还有 一些 领域 专注 于 怎样 实现 计算 比如 程式 语言 理论 是 研究 描述 计算 的 方法 而 程式设计 是 应用 特定 的 程式 语言 解决 特定 的 计算 问题 人机交互 则 是 专注 于 怎样 使 计算机 和 计算 变得 有用 好用 以及 随时随地 为人所用 有时 公众 会 误以为 计算机科学 就是 解决 计算机 问题 的 事业 比如 信息技术 或者 只是 与 使用 计算机 的 经验 有关 如 玩游戏 上网 或者 文字处理 其实 计算机科学 所 关注 的 不仅仅 是 去 理解 实现 类似 游戏 浏览器 这些 软件 的 程序 的 性质 更要 通过 现有 的 知识 创造 新 的 程序 或者 改进 已有 的 程序 早期 计算机科学 建立 的 基础 得 追溯到 最近 电子计算机 的 发明 那些 计算 固定 数值 任务 的 机器 比如 算盘 自 古希腊 时期 即 已 存在 在 年 设计 了 世界 上 第一台 机械 计算器 但 没有 完成 它 的 建造 布莱兹 帕斯卡 在 年 设计 并且 建造 了 世界 上 第一台 可以 工作 的 机械 计算器 埃达 洛夫 莱斯 协助 查尔斯 巴贝奇 在 维多利亚 时代 设计 了 差分 机年 左右 打孔机 问世 然而 以上 这些 机器 都 局限 在 只能 完成 单个 任务 或者 充其量 是 所有 可能 任务 的 子集 到 了 世纪 年代 随着 更新 更 强大 的 计算机 器 被 发明 术语 计算机 开始 用于 指代 那些 机器 而 不是 它们 的 祖先 计算机 的 概念 变得 更加 清晰 它 不仅仅 用于 数学 运算 总的来说 计算机科学 的 领域 也 扩展 到 了 对于 计算 的 研究 世纪 年代 至 世纪 年代 早期 计算机科学 开始 被 确立 为 不同 种类 的 学术 学科 世界 上 第一个 计算机科学 学位点 由 普渡大学 在 年 设立 随着 实用 计算机 的 出现 很多 计算 的 应用 都 以 它们 自己 的 方式 逐渐 转变成 了 研究 的 不同 领域 虽然 最初 很多 人 并 不 相信 计算机 可能 成为 科学研究 的 领域 但是 随后 的 年 里 也 逐渐 被 学术界 认可 公司 是 那段 时期 计算机科学 革命 的 参与者 之一 在 那段 探索 时期 的 缩写 发布 的 以及 之后 的 计算机 被 广泛 使用 不过 使用 电脑 工作 仍然 是 一件 很 沮丧 的 事情 如果 你 弄错 了 一条 指令 中 的 一个 字母 程序 将会 崩溃 而 你 也 得 从头再来 世纪 年代 后期 计算机科学 学科 还 在 发展 阶段 这种 问题 在 当时 是 一件 很 常见 的 事情 随着 时间 的 推移 计算机 科学技术 在 可用性 和 有效性 上 都 有 显着 提升 现代 社会 见证 了 计算机 从 仅仅 由 专业人士 使用 到 被 广大 用户 接受 的 重大 转变 最初 计算机 非常 昂贵 要 有效 利用 它们 某种程度 上 必须 得 由 专业 的 计算机 操作员 来 完成 然而 随着 计算机 变得 普及 和 低廉 已经 几乎 不 需要 专人 的 协助 虽然 某些 时候 援助 依旧 存在 虽然 计算机科学 被 认定 为 正式 学术 学科 的 历史 很 短暂 但 仍 对 科学 和 社会 作出 了 很多 基础 贡献 包括 提出 计算机科学 可以 分成 三个 领域 数学 工程学 科学 提议 了 三种 范式 应用 于 计算机科学 的 各个领域 作为 一个 学科 计算机科学 涵盖 了 从 算法 的 理论 研究 和 计算 的 极限 到 如何 通过 硬件 和 软件 实现 计算 系统 以前 被 叫做 由 和 的 代表 组成 确立 了 计算机科学 学科 的 个 主要 领域 计算 理论 算法 与 数据结构 编程 方法 与 编程语言 以及 计算机 组成 与 架构 还 确立 了 其它 一些 重要 领域 如 软件工程 人工智能 计算机网络 与 通信 数据库系统 并行计算 分布式计算 人机交互 计算机 图形学 操作系统 以及 数值 和 符号计算 广义 的 理论 计算机科学 包括 经典 的 计算 理论 和 其它 专注 于 更 抽象 逻辑 与 数学 方面 的 计算 按照 的 说法 计算机科学 的 最 根本 问题 是 什么 能够 被 有效 地 自动化 计算 理论 的 研究 就是 专注 于 回答 这个 根本 问题 关于 什么 能够 被 计算 去 实施 这些 计算 又 需要 用到 多少 资源 为了 试图 回答 第一个 问题 递归论 检验 在 多种 理论 计算 模型 中 哪个 计算 问题 是 可解 的 而 计算 复杂性 理论 则 被 用于 回答 第二个 问题 研究 解决 一个 不同 目的 的 计算 问题 的 时间 与 空间 消耗 著名 的 问题 千禧年 大奖 难题 之一 是 计算 理论 的 一个 信息论 与 信息 量化 相关 由 克劳德 香农 创建 用于 寻找 信号处理 操作 的 根本 极限 比如 压缩 数据 和 可靠 的 数据 存储 与 通讯 编码 理论 是 对 编码 以及 它们 适用 的 特定 应用 性质 的 研究 编码 被 用于 数据压缩 密码学 前向 纠错 近期 也 被 用于 网络 编码 研究 编码 的 目的 在于 设计 更 高效 可靠 的 数据传输 方法 算法 指 定义 良好 的 计算 过程 它取 一个 或 一组 值 作为 输入 经过 一系列 定义 好 的 计算 过程 得到 一个 或 一组 输出 算法 是 计算机科学 研究 的 一个 重要 领域 也 是 许多 其他 计算机 科学技术 的 基础 算法 主要 包括 数据结构 计算 几何 图论 等 除此之外 算法 还 包括 许多 杂项 如 模式匹配 部分 数论 等 程序设计 语言 理论 是 计算机科学 的 一个 分支 主要 处理程序 设计 语言 的 设计 实现 分析 描述 和 分类 以及 它们 的 个体 特性 它 属于 计算机科学 学科 既受 影响 于 也 影响 着 数学 软件工程 和 语言学 它 是 公认 的 计算机科学 分支 同时 也 是 活跃 的 研究 领域 研究成果 被 发表 在 众多 学术期刊 计算机科学 以及 工程 出版物 形式化 方法 是 一种 特别 的 基于 数学 的 技术 用于 软件 和 硬件 系统 的 形式 规范 开发 以及 验证 在 软件 和 硬件 设计 方面 形式化 方法 的 使用 动机 如同 其它 工程 学科 是 通过 适当 的 数学分析 便 有助于 设计 的 可靠性 和 健壮性 的 期望 但是 使用 形式化 方法 会 带来 很 高 的 成本 意味着 它们 通常 只 用于 高可靠性 系统 这种 系统 中 安全 或 保安 是 最 重要 的 对于 形式化 方法 的 最佳 形容 是 各种 理论 计算机科学 基础 种类 的 应用 特别 是 计算机 逻辑 演算 形式语言 自动机 理论 和 形式 语义学 此外 还有 类型 系统 代数 数据类型 以及 软件 和 硬件 规范 和 验证 中 的 一些 问题 尽管 计算机科学 的 名字 里 包含 计算机 这 几个 字 但 实际上 计算机科学 相当 数量 的 领域 都 不 涉及 计算机本身 的 研究 因此 一些 新 的 名字 被 提议 出来 某些 重点 大学 的 院系 倾向 于 术语 计算 科学 以 精确 强调 两者之间 的 不同 丹麦 科学家 建议 使用 术语 以 反映 这一 事实 即 科学 学科 是 围绕 着 数据 和 数据处理 而 不 一定 要 涉及 计算机 第一个 使用 这个 术语 的 科学 机构 是 哥本哈根大学 学院 该 学院 成立 于 年 便是 第一任 教授 这个 术语 主要 被 用于 北欧国家 同时 在 计算技术 发展 初期 通讯 建议 了 一些 针对 计算 领域 从业人员 的 术语 及 三个 月 后 在 同样 的 期刊 上 被 提出 第二年 又 变成 了 术语 也 曾经 被 提议 过 在 欧洲 大陆 起源于 信息 和 数学 或者 自动 的 名字 比起 源于 计算机 或者 计算 更 常见 如 法语 德语 斯拉夫 语族 著名 计算机 科学家 曾经 指出 计算机科学 并 不 只是 关于 计算机 就 像 天文学 并 不 只是 关于 望远镜 一样 设计 部署 计算机 和 计算机系统 通常 被 认为 是非 计算机科学 学科 的 领域 例如 研究 计算机硬件 被 看作 是 计算机 工程 的 一部分 而 对于 商业 计算机系统 的 研究 和 部署 被 称为 信息技术 或者 信息系统 然而 现如今 也 越来越 多地 融合 了 各类 计算机相关 学科 的 思想 计算机科学 研究 也 经常 与 其它 学科 交叉 比如 心理学 认知科学 语言学 数学 物理学 统计学 和 经济学 计算机科学 被 认为 比 其它 科学 学科 与 数学 的 联系 更加 密切 一些 观察者 说 计算 就是 一门 数学 科学 早期 计算机科学 受 数学 研究成果 的 影响 很大 如 和 这 两个 领域 在 某些 学科 例如 数理逻辑 范畴 论域 理论 和 代数 也 不断 有 有益 的 思想 交流 计算机科学 和 软件工程 的 关系 是 一个 有 争议 的 话题 随后 关于 什么 是 软件工程 计算机科学 又 该 如何 定义 的 争论 使得 情况 更加 混乱 从 其它 工程 和 科学 学科 之间 的 关系 得到 启示 宣称 计算机科学 的 主要 重点 总的来说 是 研究 计算 的 性质 而 软件工程 的 主要 重点 是 具体 的 计算 设计 以 达到 实用 的 目的 这样 便 构成 了 两个 独立 但 又 互补 的 学科 这个 计算机科学 分支 旨在 创造 可以 解决 计算 问题 以及 像 动物 和 人类 一样 思考 与 交流 的 人造 系统 无论是 在 理论 还是 应用 上 都 要求 研究者 在 多个 学科 领域 具备 细致 的 综合 的 专长 比如 应用 数学 逻辑 符号学 电机 工程学 精神 哲学 神经 生理学 和 社会 智力 用于 推动 智能 研究 领域 或者 被 应用 到 其它 需要 计算 理解 与 建模 的 学科 领域 如 金融 或是 物理 科学 人工智能 领域 开始 变得 正式 源于 这位 人工智能 先驱 提出 了 图灵 试验 以 回答 这样 一个 终极 问题 计算机 能够 思考 吗 计算机系统 结构 或者 数字 计算机 组织 是 一个 计算机系统 的 概念设计 和 根本 运作 结构 它 主要 侧重于 的 内部 执行 和 内存 访问 地址 这个 领域 经常 涉及 计算机 工程 和 电子 工程 学科 选择 和 互连 硬件 组件 以 创造 满足 功能 性能 和 成本 目标 的 计算机 计算机 性能 分析 是 一门 研究 计算机 中 工作 流 的 学科 通常 目的 是 为了 提高 吞吐量 控制 响应 时间 消除 瓶颈 以及 预测 可 预见 的 峰值 负载 下 的 性能 计算机 图形学 是 对于 数字 视觉 内容 的 研究 涉及 图像 数据 的 合成 和 操作 它 跟 计算机科学 的 许多 其它 领域 密切相关 包括 计算机 视觉 图像处理 计算 几何 与 可视化 同时 也 被 大量 运用 在 特效 和 电子游戏 计算机 安全 是 计算机技术 的 一个 分支 其 目标 包括 保护 信息 免受 未经 授权 的 访问 中断 和 修改 同时 为 系统 的 预期 用户 保持 系统 的 可 访问 性 和 可用性 密码学 是 对于 隐藏 加密 和 破译 解密 信息 的 实践 与 研究 现代 密码学 主要 跟 计算机科学 相关 很多 加密 和 解密 算法 都 是 基于 它们 的 计算 复杂性 计算 科学 或者 科学计算 是 关注 构建 数学模型 和 量化 分析 技术 的 研究 领域 同时 通过 计算机 分析 和 解决 科学 问题 在 实际 使用 中 它 通常 是 计算机 模拟 和 计算 等 形式 在 各个 科学 学科 问题 中 的 应用 计算机网络 是 管理 遍及 全球 的 计算机 连接成 的 网络 的 计算机科学 分支 并发 性是 系统 的 一种 性质 这 类 系统 可以 同时 执行 多个 可能 互相 交互 的 计算 一些 数学模型 如网 进程 演算 和 模型 被 建立 以 用于 通用 并发 计算 分布式系统 将 并发 性 的 思想 扩展 到 了 多台 由 网络连接 的 计算机 同一 分布式系统 中 的 计算机 拥有 自己 的 私有 内存 它们 之间 经常 交换 信息 以 达到 一个 共同 的 目的 数据库 是 为了 更 容易 地 组织 存储 和 检索 大量 数据 数据库 由 数据库 管理系统 管理 通过 数据模型 和 查询语言 来 存储 创建 维护 和 搜索 数据 另外 还 包括 医学 信息学 软件工程 是 对于 设计 实现 和 修改 软件 的 研究 以 确保 软件 的 高质量 适中 的 价格 可维护性 以及 能够 快速 构建 它 是 一个 系统 的 软件设计 方法 涉及 工程 实践 到 软件 的 应用 主要 进行 计算 和 算法 推理 的 研究 其中 包括 计算 理论 算法 分析 形式化 方法 并行 理论 数据库 计算机 图形学 以及 系统分析 等 通常 也 教授 程序设计 但 仅仅 将 它 看作 是 支持 计算机科学 其它 领域 的 媒介 而 不是 高级 研究 的 重心 的 计算机科学 课程 则 主要 侧重于 训练 高级 编程 而 不是 算法 和 计算 理论 这些 课程 着重 教授 那些 对于 软件 工业 很 重要 的 技能 像 这样 的 计算机 编程 过程 通常 被 叫做 软件工程 然而 尽管 计算机科学 专业 日益 推动 着 美国 经济 但是 计算机科学 教育 依然 不 存在 大多数 美国 课程 中年 月 由 和 计算机科学 教师 协会 共同 发表 了 一篇 名为 的 报告 文中 揭示 了 仅 有 个 州 通过 了 有 意义 的 高中 计算机科学 教育 标准 同时 仅 有 个 州 将 高中 计算机科学 课程 算作 毕业 要求 的 核心 学科 配合 这 篇文章 一个 新 的 无党派 宣传 联盟 被 建立 以 影响 联邦 和 政府 政策 比如 要求 政府 拨款 以 制定 计划 完善 计算机科学 教育 及 支持 计算机科学 教师 在 中国 计算机科学 或 计算机科学 与 技术 是 工科 一级 门类 下 的 二级 专业 一般 可 细分 为 三级 专业 6 | 族群 族群 是 指 一群 人 他们 认为 彼此 共享 了 相同 的 祖先 血缘 外貌 历史 文化 习俗 语言 地域 宗教 生活习惯 与 国家 体验 等 因此 形成 一个 共同 的 群体 为 区分 我族 及 他者 的 分类 方式 之一 族群 含义 在 世纪 后 有 转变 从 原来 以 少数民族 或 少数 族裔 的 意思 到 后来 以 文化 特征 区分 而 最新 的 看法 则 认为 族群 是 社会 过程 后 的 产生 的 结果 因此 族群 可能 因 历史 及时 空 环境 基于 历史 文化 语言 地域 宗教 血缘 祖先 认同 行为 生物 外貌 特征 而 形成 一群 与 其它 有所区别 的 群体 这些 区别 我者 和 他者 的 族群 性 英语 特质 可能 包括 客观 及 主观 如 认知 和 感情 的 成分 族群 这个 名词 译自 英语 源自 于 古希腊 语 的 形容词 形态 字面 意思 为 家庭 的 或 人群 的 这个 单字 成为 拉丁语 在 中世纪 时 成为 中古 英文 的 单字 在 中世纪 时 它 对应 到 英语 在 中世纪 晚期 它 对应 到 英语 据 中国 民族学 与 人类学 学者 郝时 远 考据 古汉语 民族 有 可能 在 近代 传入 日本 然而 现代 意义 的 赋予 主要 是 在 日译 西书 主要 是 德人 著作 中 对应 了 和 等 名词 族群 可以 指 民族 或 种族 也 可以 指 具有 相同 语言 行为 取向 地缘 祖籍 文化背景 或 宗教信仰 的 群体 属于 文化 人类学 或 社会学 概念 群族 并 不是 客观事物 而是 由人 界定 和 划分 的 有 很大 的 伸缩性 族群 身份 有时 是 自我 界定 的 为了 谋求 群体 团结 抵抗 歧视 争取 政治经济 权益 自我标榜 炫耀 等等 族群 身份 有时 则 是 外 在 决定 或 被 划分 的 7 | 戏剧 戏剧 是 演员 将 某个 故事 或 情境 以 对话 歌唱 或 动作 等 方式 所 表演 出来 的 艺术 戏剧 有 四个 元素 包括 了 演员 故事 情境 舞台 表演 场地 和 观众 演员 是 四者 当中 最 重要 的 元素 他 是 角色 的 代言人 必须 具备 扮演 的 能力 戏剧 与 其他 艺术类 最大 的 不同之处 便 在于 扮演 了 透过 演员 的 扮演 剧本 中 的 角色 才 得以 伸张 如果 抛弃 了 演员 的 扮演 那么 所 演出 的 便 不再 是 戏剧 戏剧 的 表演 形式 多种多样 常见 的 包括 话剧 歌剧 舞剧 音乐剧 木偶戏 等 由于 文化背景 的 差别 不同 文化 所 产生 戏剧 形式 往往 拥有 独特 的 传统 和 程式 比如 西方 戏剧 中国戏曲 印度 梵剧 日本 能乐 歌舞伎 等 戏剧 的 起源 实 不可考 目前 有 多种 假说 比较 主流 的 看法 有二一为 原始 宗教 的 巫术 仪式 比如 上古 中文 巫舞 武三字 同源 可能 是 对 一种 乞求 战斗 胜利 的 巫术 活动 的 合称 即 戏剧 的 原始 形态 另 一为 劳动 或 庆祝 丰收 时 的 即兴 歌舞 表演 这种 说法 主要 依据 是 古希腊 戏剧 被 认为 起源于 酒神 祭祀 现代 的 戏剧 观念 强调 舞台 上下 所有 演出 元素 统一 表现 以 实现 综合 的 艺术 效果 演出 元素 包括 演员 舞台 道具 灯光 音效 服装 化妆 以及 剧本 导演 等 的 一切 总称 也 包括 台上 演出 与 台下 互动 的 关系 一般 称为 观演 关系 文学 上 的 戏剧 概念 是 指为 戏剧 表演 所 创作 的 脚本 或 称之为 剧本 中文 戏剧 一词 的 字源 来自 于 南戏 北剧 的 合称 戏指 的 是 戏文 剧指 的 是 杂剧 是 在 元代 以前 在 中国 南方 与 北方 不同 的 政局 与 文化 环境 下 所 形成 的 不同 表演艺术 将 两者 合称 则 是 明代 以后 才 出现 的 用法 世界 各国 语文 中 与 戏剧 一词 将近 的 词汇 囊括 的 范围 不 一 例如 在 印度 文中 的 一词 除了 是 戏剧 之外 也 包含 舞蹈 运动竞赛 等 意义 但是 几乎 世界 各国 语文 中 与 戏剧 相关 的 词汇 几乎 具备 与 游戏 类似 的 意义 例如 在 英文 中将 一部 剧作 称为 是 通常 指有 剧本 有 对白 的 戏剧 中文 中 戏剧 的 戏 也 带有 游戏 的 意义 世界 上 三种 古老 戏剧 文化 包括 希腊 的 悲剧 和 喜剧 印度 的 梵剧 及 中国 的 戏曲 西方 戏剧 的 曙光 普遍认为 是 古希腊 悲剧 而 古希腊 悲剧 则 是 源于 古希腊 雅典 城邦 在 公元前 世纪 在 神 戴 欧尼修 斯 的 庆祝 典礼 上 举行 过 戏剧 比赛 在 祭典 中 人们 扮演 戴 欧尼修 斯唱 戴 神颂 跳 羊人舞 羊 是 代表 戴 欧尼修 斯 的 动物 古希腊 悲剧 都 是 诗剧 严谨 古雅 庄重 大气 表演 时有 歌队 伴唱 史实 表明 歌队 先于 演员 存在 关于 这个 起源 也 可以 参考 德国 哲学家 尼采 的 早期 哲学著作 悲剧 的 诞生 其中 有 五位 古希腊 戏剧 作家 十分 有名 他们 的 作品 虽然 只有 一小部分 但是 仍 保留 到 到 今天 埃斯库 罗斯 的 历史 悲剧 波斯 人 是 现存 最 古老 的 戏剧 它 在 公元前 年 的 城市 酒神节 比赛 中 获得 首奖 但 埃斯库 罗斯 花 了 超过 年 致力于 这份 剧本 悲剧 戏剧家 呈现 戏剧 的 四部曲 的 方式 通常 包括 三个 悲剧 和 一个 羊人剧 喜剧 从 到 公元前 年 的 比赛 中 正式 受到 肯定 连环 剧作家 在 城市 酒神节 比赛 在 伯罗奔尼撒 战争 期间 有 减少 会 提供 一个 单一 的 喜剧 古希腊 喜剧 划分 为 旧 喜剧 公元前 世纪 中间 的 喜剧 公元前 世纪 和 新 喜剧 公元前 世纪 至 世纪 雅典 的 戏剧 文化 可 分为 三种 风格 悲剧 喜剧 和 撒 特剧 悲剧 探讨 自由 意志 与 神谕 命定 对立 等 宗教 哲学 议题 参考 伊底帕斯 王 喜剧 古典 时期 的 旧 喜剧 多 议论 当代 社会 时政 及 文学 哲学思潮 参考 利西 翠妲 希腊化 时期 的 新 喜剧 则 更为 写实 以 浪漫 的 家庭 纠葛 为 题材 参考 坏脾气 的 老人 撒特剧 以 之前 上演 的 悲剧 或 神话故事 为 题材 旨在 透过 撒特 歌队 嘲讽 担任 主角 的 贵族 或 神祇 希腊 戏剧 继续 在 整个 罗马 时期 进行 的 在 公元前 标志 着 定期 罗马 戏剧 的 开端 古罗马 时期 的 娱乐活动 相当 丰富 多元 除了 官方 支持 的 正规 戏剧 以及 形制 短小 的 亚 提拉 闹剧 优剧 默剧 之外 还 包含 了 杂耍 赛车 赛马 水战 兽斗 等 诉诸 感官 刺激 的 娱乐 竞技 这些 夸奇 腥膻 的 活动 一方面 反映 出 古罗马 观众 的 口味 一方面 也 影响 了 正规 戏剧 的 风格 古罗马 藉由 取消 歌舞 队 将 音乐 打散 至 全剧 并 以 直接 演出 而 非以 叙述 歌唱 方式 来 铺陈 戏剧 情节 使 戏剧性 获得 进一步 开展 建立 西方 剧场 话剧 传统 的 雏型 此外 并 有 将 戏剧 区分 为 五幕 的 惯例 戏剧 类型 大致 有 喜剧 悲剧 喜剧 以 家庭 纠葛 或 角色 性格 为 题材 而 所有 的 戏剧 活动 一律 发生 在 街上 的 作品 巧用 误认 模式 动作性 大于 语言性 趋近 于 闹剧 风格 如美纳 柯米 而 的 作品 善用 双线 结构 突显 角色 间 的 差异 戏剧 喜感 是 语言 多于 动作 可 归类 为 浪漫 喜剧 的 范畴 如 兄弟 悲剧 的 悲剧 多 取材自 希腊 悲剧 但 文藻 迭丽富 道德 意识 剧中人 经常 在 强烈 的 动机 驱使 下 做出 极端 的 行为 而 戏剧 动作 充斥 着 骇人听闻 的 暴行 与 天人 交感 的 异象 挑动 观众 感官 就 西方 的 定义 来说 中国 没有 话剧 的 传统 不过 一般 在 讨论 中国 戏剧 时若 不以 严格 的 定义 划分 中国 古代 的 戏曲 应 归入 戏剧 的 大类 中国戏曲 的 根源 在 可以 追溯到 先秦 到 汉代 的 巫 祇 仪式 但是 宋代 南戏 的 发展 才 有 了 完备 的 戏剧 文本 创作 现存 最早 的 中国 古代 戏剧 剧本 是 南宋 时 的 张协 状元 元代 时以 大都 平阳 和 杭州 为 中心 元杂剧 大放异彩 后世 形成 了 诸多 戏曲 形式 也 就是 各 剧种 明代 起源于 苏州 的 昆曲 经过 发展 首先 得到 士族 大夫 的 追捧 和 喜爱 他们 大量 创造 剧本 不断 修改 曲谱 同时 修正 昆曲 的 戏剧 理论 并 使得 传奇 剧本 成为 一种 新 的 主流 文学 形式 随后 昆曲 又 得到 晚明 和 清代 宫廷 皇室 的 喜爱 成为 贵族 生活 的 一部分 成为 获得 官方 肯定 的 戏剧 艺术 故称 雅而以 各地 方言 为 基础 的 地方戏 广受 民间 喜爱 则 称花 于是 在 清代 形成 了 花雅之争 实际上 是 戏曲 共同 繁荣 的 局面 这 丰富 了 戏曲 艺术 的 门类 也 形成 了 各自 的 艺术 特色 近年来 台湾 的 戏剧 研究 学者 曾永义 提出 一套 说法 认为 在 讨论 中国 戏剧 起源 时 应该 要 区分 大戏 与 小戏 大戏 是 成熟 的 戏曲 而 小戏 则 是 戏剧 的 雏型 大戏 是 在 到 了 金元 杂剧 之后 才 发展 完成 而 之前 的 宋 杂剧 唐代 的 代面 踏摇娘 钵头 参军 戏樊哙 排君难 等 都 可 列入 小戏 的 行列 而 中国 在 非常 早 之前 就 有 小戏 中国 在 与 近代 西方 有 文化 接触 前 没有 西方 意义 上 的 戏剧 主要 指 话剧 传统 中国 传统 的 戏剧 为 一种 有 剧情 的 以 歌舞 演 故事 的 综合 音乐 歌唱 舞蹈 武术 和 杂技 等 的 综合 艺术 形式 也 就是 戏曲 曲艺 根据 不同 的 分类 标准 戏剧 可以 被 分成 不同 的 类型 不过 最 基本 使用 最多 的 分类 是 悲剧 喜剧 和 悲喜剧 正剧 其中 悲剧 出现 的 时间 早 于 喜剧 戏剧 文本 即 剧本 是 一出 戏剧 的 基本要素 是 一台 戏 的 先决条件 剧本 最 重要 的 是 能够 被 舞台 上 搬演 戏剧 文本 不算 是 艺术 的 完成 直到 舞台 演出 之后 即 演出 文本 才 是 最终 艺术 的 呈现 历代 文人 中 也 有人 创作 过 不 适合 舞台 演出 甚至 根本 不能 演出 的 剧本 这类 的 戏剧 文本 则 称为 案头 戏 也 叫 书斋 剧 现代 戏剧 中 也 出现 了 没有 剧本 的 演出 实例 戏剧 的 文学 本 在 不 演出 的 状态 下 可以 作为 单独 的 文学 样式 欣赏 随着 西方 现代 戏剧 在 导演 以及 演员 训练 体系 上 的 实践 戏剧 理论 逐渐 从 戏剧 文本 的 讨论 扩大 到 剧场 整体 进而 产生 场面 调度 等 新 观念 其中 比较 著名 的 提法 是 世纪 年代 英国 戏剧 导演 彼德 布鲁克 在 其 专着 空 的 空间 中 提出 的 观念 一个 演员 走过 一个 空荡荡 的 舞台 这 就是 一出戏 的 全部 无论 戏剧 一词 如何 定义 只有 满足 以下 的 条件 才 可 视为 一次 戏剧 活动 只要 是 一个 空间 便 可以 成为 戏剧 演出 的 场所 一般 称为 剧场 历史 上 有 许多 专门 供 戏剧 活动 使用 的 场所 有 的 在 户外 有 的 在 室内 这些 专供 戏剧 演出 的 场所 包括 剧场 戏院 舞台 等 在 中国 古代 所谓 的 舞台 最早 是 用 在 歌舞 仪式 上 舞者 进行 仪式 时所站 的 一块 以土 推成 的 高台 随着 戏剧 发展 逐渐 成熟 而 出现 了 戏棚 戏台 戏亭 勾栏 等 演出 场所 西方 戏剧 的 演出 从 希腊 的 露天剧场 古罗马 的 圆形 剧场 即 角斗场 发展 到 近世 的 镜框 式 舞台 适合 先锋 实验 戏剧 演出 的 黑匣子 或作 黑盒 黑箱 小剧场 等 目前 多以 演员 称呼 戏剧 中 的 表演者 在 中国 历史 上 还有 许多 称呼 戏剧 表演者 的 称呼 例如 戏子 优伶 娼 优伶 人散乐 等 而 因为 在 中国 过去 戏剧 的 表演者 身份 并 不 高 这些 称呼 许多 也 有着 刻意 贬损 的 意味 而 以 娼 称呼 戏剧 表演者 固然 是因为 表演者 是 歌者 但是 在历史上 有长 的 时期 戏剧 表演 与 娼妓 之间 的确 关系密切 而 戏剧 表演者 所 组成 的 组织 多 称为 戏团 过去 多 称为 是 戏班 而 如果 是 某 一户 富有 人家 自己 经营 为了 自己 的 娱乐 所 训练 出 的 戏班 叫做 家班家班 在 明代 之后 普遍 8 | 电影 电影 是 一种 表演艺术 视觉艺术 及 听觉 艺术 利用 胶卷 录影带 或 数位 媒体 将 影像 和 声音 捕捉 起来 再 加上 后期 的 编辑 工作 而成 电影 中 看起来 连续 的 画面 是 由 一帧 帧 单独 的 照片 构成 的 至于 关于 电影 中 运动 的 感知 是因为 人们 因为 视觉 上 的 飞 现象 使得 对 一连串 静态 图片 却会 造成 移动 的 错觉 传统 对 电影 中 运动 感知 的 理解 是因为 视觉暂留 使得 图像 离开 后 仍 能 在 眼睛 保留 视像 约 十分之一 秒 因此 大脑 感觉 到 图像 是 运动 的 但 在 年 出版 的 德国 心理学家 的 电影 一次 心理学 研究 中 第三章 深度 感 和 运动感 中 雨果 明斯特 伯格 证明 了 外观 运动 绝不 是 影像 滞留 即 视觉暂留 的 结果 而是 但 不仅仅 是 对 运动 的 连续 阶段 的 感知 电影 制作 本身 是 艺术 也 是 电影 可以 由 电影摄影机 拍摄 真实 影像 再 制作 而成 也 可以 利用 传统 的 动画 技巧 绘制 图画 再 拍摄 图画 而成 甚至 可以 利用 电脑 成像 及 计算机 动画 制作 电影 也 可以 在 电影 中 利用 上述 所有 的 技术 及其 他 电影 技术 发展 初期 有 各种 不同 的 放映 速度 但 现时 电影 都 多 以 每秒 二十四 格 图像 作 放映 标准 路易斯 普林斯 于 年月日 使用 改进版 的 单 镜头 摄影机 即 拍摄 了 电影 朗德 海 花园 场景 他 在 利兹 的 汉 斯莱特 区 的 惠 特利 工厂 以及 惠 特利 位于 朗德 海 的 家 奥克 伍德 农庄 展出 了 他 这 第一部 电影 电影 成为 第七 艺术 的 来 由 是 意大利 诗人 和 电影 先驱者 他 在于 年 发表 的 一篇 第六 艺术 的 诞生 将 电影 放在 建筑 雕塑 绘画 音乐 诗 之后 他 后来 又 加入 了 早 在 电影 之前 就 有 的 舞蹈 因此 电影 就 成为 第七 艺术 也 有 一些 说法 是 将 早 在 电影 问世 前 就 有 的 戏剧 放在 电影 之前 以此 方法 来算 电影 就 成为 第八 艺术 如今 许多 电影 仍然 用能 把 影像 记录 到 胶卷 上 的 摄影机 来 拍摄 胶卷 经过 冲洗 之后 再用 放映机 来 运行 胶卷 放映机 可以 发出 光线 透过 胶卷 这样 影像 就 在 银幕 上 显示 出 了 自从 有声电影 发明 以来 大多数 的 电影 都 是 有声电影 最近 许多 电影 都 用 数码 摄像机 来 拍摄 放映 的 时候 可以 用 数位 放映机 也 可以 把 数位 影像 转置 到 传统 的 胶片 上 这种 方法 可 避免 胶片 长时间 存放 的 失真 年 火车 进站 是 卢米 埃 兄弟 制作 的 黑白 无声 的 纪录片 这部 纪录 火车 驶抵 希欧 达 车站 的 影片 是 架 在 月 台上 所 拍摄 的 全长 五十秒 的 内容 描写 了 蒸汽 火车 牵引 着 客车 从 远处 渐渐 地 驶进 车站 同年 卢米 埃 兄弟 亦 映演 离开 工厂 一套 真正 有 演员 演出 的 电影 出现 拍摄 当时 工人 下班 的 景象 早期 的 电影 都 是 无声电影 然而 电影 发行商 发现 在 播放 电影 时有 一个 讲评人 来 叙述 故事 补 上 角色 间 的 对话 可以 更 吸引 观众 没 过 几年 播放 的 电影 都 会 在 下边 附上 字幕 这样 就 可以 在 演员 说话 时 表示 出 他 说 的 内容 这 使得 讲评人 的 必要性 大打折扣 事实上 电影院 老板 经常 替换 掉 讲评人 请 乐师 在 电影 放映 时 伴奏 若 电影院 有 相应 乐器 的话 通常 是 钢琴师 或 风琴 师 伴奏 的 音乐 应该 随时 符合 电影 的 情节 气氛 后来 技术 的 进步 允许 制片人 创作 与 电影 画面 同步 的 音轨 使得 电影 进入 了 有声 时期 史上 第一部 有声 故事 电影 是 爵士 歌手 年 而 第一部 百分百 的 有声电影 是 纽约 的 灯光 音轨 的 录制 可以 与 拍摄 电影 相 分离 但 真人 电影 音轨 录制 许多 部分 是 与 拍摄 画面 同时 进行 的 有声电影 发明 后 无声电影 和 电影院 里 的 乐师 迅速 销声匿迹 电影 发展 最后 一个 重要 步骤 是 彩色电影 于 年 左右 引入 市场 而 被 世界 上 第一部 公认 的 彩色电影 片 是 浮华世界 在 彩色电影 取代 黑白 电影 更是 个 逐渐 转变 的 过程 中 随着 彩色 技术 的 改良 越来越 多 的 彩色电影 至今 可以 说 已经 基本上 没有 黑白 电影 了 不 像 摄影 出于 某些 考虑 用 黑白胶片 比较 好 拍电影 几乎 没有 不用 彩色 的 理由 除了 个别 的 例外 例如 史匹堡 的 电影 辛德勒 的 名单 前 苏联 电影 这里 的 黎明 静悄悄 年 的 法国电影 大 艺术家 以及 年 的 波兰 电影 依达 的 抉择 等 这 通常 都 是 出于 艺术 或 戏情 的 考量 特意 拍 成 黑白 电影 在 电影 制作 初期 电影 的 特效 特别 效果 镜头 加以 各项 技术 来 配合 到 如今 电脑 已 大量 配合 应用 在 电影 制作 上 一些 镜头 演员 仅 需 端坐 在 特制 椅子 上 做 一些 表情 和 动作 即可 而 出现 在 银幕 上 的 背景 和 剧情 简直 不可 想像 因为 以 电脑 来 做 编辑 影片 的 工作 取代 一味 繁琐 的 步骤 使 最后 出厂 的 拷贝 品质 与 已往 的 产品 亦 不可同日而语 了 电影 理论 的 目的 是 以 电影 为 一个 艺术 来 研究 发展 简明 且 系统化 的 概念 以 电影 为 艺术 形式 的 概念 起源 自 的 的 鲁道夫 阿恩海姆 贝拉 巴拉兹 及 齐格弗 里德 科拉 考尔 开始 的 强调 电影 和 现实 的 不同 因此 可以 视为 是 美术 不过 安德烈 巴赞 反对 此一 理论 认为 电影 美学 的 本质 是 在 有 能力 机械性 的 复制 现实 而 不是 其 和 现实 不同 的 的 部份 这 就 产生 了 现实主义 理论 更 近期 的 分析 是 由 雅各 拉冈 的 精神分析 及 弗 迪南 德 索绪尔 的 符号学 等 理论 所 带动 因此 出现 了 等 另一方面 受到 路德维希 维特根斯坦 影响 来自 分析 哲学 传统 的 评论 试着 澄清 一些 理论 研究 中 出现 的 误解 因此 生 了 电影 词汇 的 分析 以及 其 和 之间 的 关连性 电影 有 其 使用 的 语言 曾 写 了 一篇 电影 理论 中 的 经典 文章 标题 是 如何 读 电影 就是 提到 此一 概念 导演 英格玛 伯格曼 曾 说 过 一句 著名 的话 对 我 而言 安德烈 塔尔 科夫斯基 是 最 伟大 的 电影 导演 他 发明 了 一种 新 的 语言 忠于 电影 的 本质 这种 语言 的 一个 例子 是 一连串 来回 出现 的 画面 其中 一个 画面 是 一个 演员 在 画面 的 左侧 另 一个 画面 是 一个 演员 在 画面 的 右侧 观众 可以 了解 这种 语言 知道 这 代表 这二 个人 的 对话 这 描述 了 另 一个 电影 理论 利用 视觉 的 组合 及 恰当 的 剪辑 电影 可以 让 观众 有 似乎 身在 现场 观看 主角 之间 对话 的 能力 经典 好莱坞 电影 就 包括 了 这种 叙事 理论 因为 在 电影 经典 时期 位 在 好莱坞 的 各片 厂 早已 反覆 的 使用 此一 手法 另 一个 电影 语言 是 将 镜头 拍摄 一个 演员 画面 无声 然后 镜头 切换 到 另 一个 较 年轻 长相 类似 的 另 一个 演员 这 代表 了 演员 在 回忆 以前 的 情形 电影 中 叙述 一些 在 较 早 时间 发生 的 事情 电影 评论 影评 是 有关 电影 的 分析 以及 评估 一般而言 电影 评论 会 分为 二类 由 电影 研究者 提出 的 学术 电影 评论 以及 在 报纸杂志 或 其他 媒体 上 常见 到 的 杂志 电影 评论 撰写 报纸杂志 及 广播 媒体 上 影评 的 电影 评论者 多半会 看 许多 新 上映 的 电影 一般 每部 片 只会 看 一次 而且 一天 只 看 一部 到 二部 片才 有 足够 时间 来 撰写 电影 评论 影评 对 电影 本身 有 很大 的 影响 尤其 对 特定 片种 的 电影 更是如此 一般 大众 口味 的 动作片 恐怖片 喜剧片 的 票房 不太会 受到 电影 评论 的 影响 电影 评论 的 主要 内容 是 剧情 概要 及 对 电影 的 描述 这 也 是 大部份 人 决定 是否 要 看 特定 电影 的 原因 对于 一些 经典电影 例如 剧情片 电影 评论 的 影响 相当 大 糟糕 的 电影 评论 可能 会 毁掉 一部 电影 而且 造成 电影 公司 的 经济损失 电影 评论 是否 影响 票房 表现 一事 仍 是 争议 中 的 议题 有些 人 认为 因为 如此 激烈 资金 充足 电影 评论者 很难 影响 电影 的 票房 不过 有些 重金 行销 的 电影 被 影评 批评 的 一文不值 结果 票房 非常 差 也 有 一些 独立 制作 或是 小 成本 行销 的 电影 因为 影评 的 赞誉 因此 有 意外 的 成功 因此 在 一些 情形 下 影评 可能 还是 会 影响 票房 也 有人 注意 到 影评 者 的 正面 评论 会 让 大众 注意 到 一些 较 不为人知 的 影片 相对 的 也 有 一些 电影 公司 可能 因为 对 电影 信心 不足 因此 不 安排 对 影评 者 的 试映 会 避免 影评 者 的 评论 破坏 大家 对 电影 的 印象 不过 这 多半会 有 反 效果 电影 评论者 相当 聪明 此 情形 下 可能 会 警告 大众 这部 片 不 值得一看 而 常常 电影 也 的确 如 影评 预期 的 不 好看 电影 制作 的 方式 是 依 制片 者 想要 表达 的 内容 以及 呈现 内容 的 设备 而 不同 拉洋片 只 需要 在 纸卷 上 有 一连串 的 图案 即可 电影 制作 最 简单 的 方式 是 一个 人加 一台 电影 照相机 其至 可以 不用 电影 照相机 像斯坦 布拉 哈格 年 的 电影 或是 由 上 千名 演员 临时演员 及 剧组 及 许多 道具 及 设备 组成 几乎 每 一部 电影 都 会 需要 经过 概念 计划 拍片 修改 及 发行 的 流程 在 典型 好莱坞 电影 的 制作 周期 中会 有 以下 主要 的 步骤 一般 一部 电影 会 需要 三年 的 时间 头 一年 脚本 发展 第二年 是 前期 制作 及 电影 制作 第三年 是 后期制作 及 电影 发行 是 指 让 阅 听 人 可以 看到 电影 的 过程 一般 会 由 专门 的 进行 他们 会 决定 电影 的 行销 策略 影片 将要 展出 或 可供 观赏 的 式 以及 决定 时间 等 电影 除了 在 电影院 供 人 观看 外 放在 随选 视讯 上 或是 透过 广播 联卖 方式 作成 电视节目 其他 发行 的 方式 包括 个人 购买 或是 出租 电影 的 或 蓝光 光碟 是 在 互联网 上 下载 9 | 音乐 音乐 广义 而言 就是指 任何 以 声音 组成 的 艺术 英文 一 词源 于 古希腊 语 的 意即 缪斯 女神 的 艺术 而 中文 的 音乐 二字 许慎 说文解字 解释 为 音声 也 生于 心有 节于 外 谓之 音 认为 音乐 和 声音 的 区别 在于 音乐 需要 透过 人心 去 想像 和 创造 音乐 可 分为 创作 演奏 聆听 三个 过程 在 不同 文化 和 社会 对于 音乐 的 过程 及其 重要性 都 有 不同 的 理解 例如 在 西非 鼓乐 里 每个 人 皆 是 参与者 人们 不会 区分 作曲者 演奏者 和 聆听 者 的 身份 至于 何谓 声音 噪音 和 音乐 的 区别 没有 公认 的 标准 因为 音乐 和 数学 物理 相关 欧洲 自 古希腊 时代 开始 有人 论述 乐理 在 西方 乐理 中 音乐 的 主要 元素 有 音高 或 声音 的 频率 节奏 和 音色 不同 的 音高 重迭 形成 和 声音 高 依据 节奏 进行 成为 旋律 常用 的 音高 形成 音阶 和 调性 规律性 的 强拍 和 弱 拍 形成 节拍 拍子 的 快慢 构成 速度 但 近代 有 不少 音乐家 不 认同 传统 的 理解 例如 二十世纪 美国 作曲家 约翰 凯吉 认为 任何 声音 和 静默 皆 是 音乐 音乐 可以 分为 不同 种类 但 每种 种类 的 区别 常常 是 含糊 和 具 争议 的 音乐 可以 用 乐谱 描述 依据 乐谱 演奏 但 也 有 不少 音乐 类型 如 民歌 或 爵士乐 是 由 演奏者 即兴 创作 的 乐谱 作为 一种 符号 的 语言 只能 描述 声音 的 属性 或 指示 演奏 所 需 的 技巧 却 无法 记录 声音 本身 因此 在 录音 技术 出现 之前 欣赏 音乐 必需 现场 聆听 或 自己 亲身 参与 演奏 传统 上 欣赏 音乐 有 特定 的 场所 从 古时 的 宫庭 教堂 庙宇 到 今天 的 音乐厅 酒吧 等等 十九 世纪末 留声机 的 发明 令 声音 可以 记录 和 复制 改变 了 欣赏 音乐 的 模式 一般 认为 录音 技术 和 大众 媒体 是 流行音乐 形成 的 主要 因素 现在 人们 可以 在 家中 聆听 唱片 和 音乐 录像 透过 无线电 以 收音机 和 电视接收 声音 的 讯号 也 可以 携带 随身听 在 任何 一个 地方 聆听 音乐演奏 音乐 需要 透过 歌唱 或 乐器 广义 的 乐器 包括 一切 可以 发出声音 的 工具 在 石器时代 人们 已经 开始 制作 原始 的 乐器 今天 电脑 和 不少 电子音乐 产品 可以 透过 制作 音乐 音乐 是 一种 需要 学习 的 技能 而 在 不少 国家 的 基础教育 中 包括 有 音乐课 而 一些 音乐学院 则 提供 专业 的 音乐教育 音乐学 是 一个 历史 的 科学 的 研究 音乐 的 广阔 领域 其中 包括 音乐 理论 和 音乐史 另外 自 十九 世纪末 开始 有 民族 音乐学 研究 各地 不同 的 音乐 文化 音乐 的 要素 包括 每首 不同 的 音乐 都 是 主要 由 不同 的 节奏 和 旋律 来 区分 的 这 两种 要素 决定 了 音乐 的 个性 由 两个 以上 的 乐器 或 两个 以上 的 人 共同 演奏 演唱 的 音乐 可以 由和声 协调 组成 复调音乐 每种 乐器 和 每个 人声 都 有 自己 独特 的 音色 不同 音色 的 乐器 组合 形成 独特 的 效果 安排 这些 乐器 的 组合 叫做 配器 以上 四种 要素 的 不同 组合 组成 了 每首 音乐 独特 的 性格 使人 在 聆听 不同 音乐 时能 感受 到 欢快 悲伤 慷慨 振奋 等 各种 情绪 能 理解 是 哪个 民族 哪个 地区 的 音乐 经常 聆听 音乐 甚至 可以 从 不同 的 音色 中 听 出 是 哪个 人 演唱 的 是 哪种 乐器 在 演奏 的 音乐 是 一种 符号 一种 声音 符号 表达 人 的 所思 所想 是 人们 思想 的 载体 之一 音乐 是 有 目的 的 是 有 内涵 的 其中 隐含 了 作者 的 生活 体验 思想 情怀 音乐 从 声波 上 分析 它 介于 噪声 和 频率 不变 的 纯音 之间 从 效果 上 讲 它 可以 带给 人 美的 享受 和 表达 人 的 情感 音乐 是 社会 行为 的 一种 形式 通过 音乐 人们 可以 互相 交流 情感 和 生活 体验 在 歌曲 中 这种 作用 表现 得 最为 突出 古代 伟大 音乐家 的 创作 和 民歌 的 流行 基本 是 凭借 灵感 产生 的 后来 的 学者 在 研究 这些 能 流行 多年 的 音乐 逐渐 总结 出 理论 其后 的 音乐家 就 在 这些 理论 的 指导 下 进行 创作 音乐 理论 证明 哪些 音乐 能 被 大多数 人 接受 使人 感到 悦耳 现代 并 结合 物理 声学 的 研究 结果 使 理论 不断 发展 完善 但 音乐 理论 也 有 其 局限性 现代 音乐 理论 主要 是 在 西方 古典音乐 的 基础 上 发展 起来 的 有时 也 面临 无法解释 的 现象 例如 根据 音乐 理论 小 二度 音是 最 不 和谐 的 和 声 但 中国 的 琵琶 其中 有 两根 弦 的 主音 却是 二度 音程 现代 摇滚音乐 根据 音乐 理论 是 最 不 和谐 的 噪声 却 受到 如此 多人 的 欢迎 音乐 理论 仍然 面临 着 还 需要 进一步 发展 完善 的 问题 音乐 主要 有 两种 形式 用人 声唱 的 声乐 和 用 乐器 奏 的 器乐 不论是 声乐 或 器乐 都 有 许多种 结合 的 方式 如 独唱 合唱 对唱 独奏 协奏 交响乐 等 两者 也 可以 混合 声乐 用 乐器 伴奏 或 在 器乐 交响乐 中 混入 人声 等等 声乐 是 由 一个 或 多个 歌手 表演 的 音乐 形式 使用 乐器 伴奏 与否 皆 可 而 人声 是 作品 的 重点 含有 人声 但 重点 不 在 其 上 的 乐曲 一般 称作 器乐 如 古斯塔夫 霍尔斯特 的 行星 组曲 中 没有 歌词 的 女声 合唱 没有 乐器 伴奏 的 的 合唱曲 则 通常 称为 无 伴奏 合唱 又称 阿卡 贝拉 对于 声乐 而言 相当 多 声乐 作品 部份 或 全部 为 模仿 其他 声音 或 纯粹 内容 抽象 而 运用 非 语言 音节 甚或 是 噪音 然而 一般 人 特别 注意 歌词 的 使用 较 短小 且 含有 歌词 的 声乐 作品 常 称为 歌曲 声乐 也许 是 最 古老 的 音乐 形式 因为 它 不 需要 任何 乐器 仅仅 人声 便 可 在 各种 音乐 文化 中 都 存在 着 某种 形式 的 声乐 语言 和 音乐 目的 虽 不同 皆 有 共同 的 音乐 因子 人声 又 因 性别 音域 的 高低 音质 等 不同 分成 以下 几种 音色 器乐 是 相对 于 声乐 而言 完全 用 乐器 演奏 而 不用 人声 或 人声 处于 附属 地位 的 音乐演奏 的 乐器 可以 包括 所有 种类 的 弦乐器 木管乐器 铜管乐器 和 打击乐器 有 的 器乐曲 也 应用 部分 人声 一般 没有 歌词 只是 作为 效果 但 部分 作曲家 有时 也 加入 一些 人声 例如 贝多芬 写作 的 第九 交响曲 中 也 加入 合唱 部分 欢乐颂 但 正确 来说 交响曲 大部分 为 器乐 而 做 较 少 为了 声乐 而 做 西方 音乐 主要 指 欧洲 的 音乐 由于 欧洲 历史 上 统治 阶层 比较 重视 音乐 因此 许多 音乐家 都 得到 资助 和 保护 发展 出 比较完善 的 音乐 理论 目前 西方 的 音乐 理论 在 全世界 的 音乐界 占有 主导地位 欧洲 音乐界 发展 的 记谱 法 和 作曲 的 程式 得到 世界 的 公认 先秦时代 礼乐 制度 被 赋予 维系 社会秩序 的 功能 在 中国 传统 思想 里 音乐 与 人心 情感 间 的 关系 受到 很大 的 重视 尤其 儒家思想 认为 音乐 对 人性 具有 教化 启迪 的 作用 这 在 诗经 大序 礼记 乐记 荀子 乐论 篇 史记 乐书 等 作品 中均 可 了解 甚至 十三经 中 的 乐经 对 音乐 的 功能 也 做 了 更 深入 的 说明 惜 今 已 失传 中国 地域 广阔 民族 繁多 各地 的 民间 音乐 素材 非常 丰富 现代 中国 吸收 了 西方 音乐 的 理论 来 整理 古代 的 文献 和 民间 音乐 编写 民族乐器 的 曲目 使 中国 音乐 有 了 很大 的 发展 中国 古代 音乐家 的 地位 不高 没有 统治阶级 对 音乐 的 有效 保护 所以 虽然 很 早就 发明 了 记谱 法 但 许多 有名 的 作品 没有 能够 流传 下来 大部分 流传 下来 的 作品 都 是 依靠 民间艺人 口传心授 但 另一方面 古代 大量 士人 官僚 本身 却 精通 音乐 如 孔子 周瑜 阮籍 苏轼 等 皆 是 有名 的 琴 人 中国 音乐 分类 音乐 是 自从 人类 出现 后 就 伴随 着 人类 的 进化 而 发展 的 因此 世界各地 都 有 自己 独特 的 音乐 形式 和 乐器 虽然 世界各地 的 音乐 理论 发育 并 不 平衡 但 音乐 风格各异 都 有 自己 的 发展 道路 现代 音乐 广泛 吸收 了 世界各地 的 音乐 素材 各地 的 音乐 对 世界 音乐 的 发展 都 有 自己 的 贡献 二十世纪 中期 以后 发展 起来 的 流行音乐 违背 了 古典音乐 的 理论 吸收 了 世界各地 的 地方 音乐 成分 强调 了 群众 参与 听众 再也 不是 静静地 聆听 音乐 的 旁听者 而是 热烈 的 参与者 音乐 回归 到 原始 的 载歌载舞 的 形式 更能 调动 人们 的 情绪 因此 受到 年轻人 的 热烈欢迎 打破 地域 民族 国界 的 限制 在 全世界 广泛 流行 作曲家 创作 的 音乐 可以 通过 几种 媒体 传播 最 传统 的 是 现场 体验 作为 观众 或者 演奏者 之一 现场 音乐 也 可以 通过 无线电 电视 或者 因特网 广播 有些 音乐风格 注重 为 表演 而 发音 有些 则 注重 产生 录音 然后 用于 后期 混响 合成 它们 从不 被 直播 现场表演 风格 的 音乐 在 录制 时 也 经常 采用 编辑 和 分离 的 功能 以 产生 听 起来 比 实际 演出 更好 的 效果 由于 引入 了 保护 演奏者 作曲家 发行商 和 制作 人 的 法律 譬如 美国 的 年 家庭 录制 法案 以及 英国 年 修订 的 用于 保护 文学 和 艺术作品 的 规范 录音 和 现场 演出 也 变得 更 易 通过 计算机设备 和 因特网 用 一种 通常 称为 音乐 随选 的 形式 获得 在 很多 文化 中 有些 音乐 的 表演 和 聆听 没有 很大 的 区别 因为 现场 每个 人 都 以 集体 形式 通过 某种 方式 涉及 到 音乐 活动 中来 在 工业化 的 国家 通过 录制 形式 譬如 听 音乐 录音 或是 观看 音乐 录像 成 了 最为 普遍 的 感受 现场 演出 的 形式 这种 形式 大致 开始 于 世纪 中叶 有时 现场 演出 采用 了 预先录制 的 声音 例如 可以 使用 唱片 来 制造 刮 碟 效果 而 有些 世纪 的 作品 用 独唱 或 独奏 表演 和 预制 的 磁带 音乐 同时 进行 计算机 和 或 多 键盘乐器 可以 用来 编程 产生 和 播放 音乐 听众 也 可以 通过 卡拉 成为 演出者 这种 形式 为 日本 人 创造 它 采用 录像 和 无 声乐 的 音轨 这样 演出者 就 可以 将 他们 自己 的 声音 加上 去 音乐 是 初等教育 的 一个 重要 组成部分 是 培养 孩子 们 艺术 素养 的 有效 工具 在 世界各地 一般 从 幼儿园 音乐教育 都 已经 开始 了 古代 中国 将 音乐 视为 士大夫 应 具备 的 六艺 才能 之一 至于 现今 中国 正规 音乐教育 持续 到 九年 义务教育 结束 即 初中 毕业 普通高中 一般 也 开设 音乐课 作为 专业 音乐 人员 一般 要 经过 专门 的 高等 音乐教育 不过 在 目前 从事 通俗歌曲 和 流行音乐 的 专业 人员 大部分 都 没有 经过 音乐 专门 的 高等教育 都 是 依靠 本身 的 才能 和 自我 学习 10 | 经济学 经济学 是 一门 对 产品 和 服务 的 生产 分配 以及 消费 进行 研究 的 社会科学 西方 语言 中 的 经济学 一 词源 于 古希腊 的 起初 这一 领域 被 称为 政治经济学 但 世纪 经济学家 采用 简短 的 经济学 一词 来 代表 经济 科学 这 也 是 为 避免 被 误解 为 政治学 数学 和 伦理学 等 领域 经济学 注重 的 是 研究 经济 行为 者 在 一个 经济 体系 下 的 行为 以及 他们 彼此之间 的 互动 在 现代 经济学 的 教材 通常 将 这门 领域 的 研究 分为 总体 经济学 和 个体 经济学 微观 经济学 检视 一个 社会 里 基本 层次 的 行为 包括 个体 的 行为 者 例如 个人 公司 买家 或 卖家 以及 与 市场 的 互动 而 宏观 经济学 则 分析 整个 经济体 和 其 议题 包括 失业 通货膨胀 经济 成长 财政 和 货币政策 等 其他 的 对照 还 包括 了 实证 经济学 研究 是 什么 以及 规范 经济学 研究 应该 是 什么 经济 理论 与 实用 经济学 行为 经济学 与 理性 选择 经济学 主流 经济学 研究 理性 个体 均衡 等 与 非主流 经济学 研究 体制 历史 社会 结构 等 经济学 的 分析 也 被 用 在 其他 各种 领域 上 主要 领域 包括 了 商业 金融 和 政府 等 但 同时 也 包括 了 如 健康 犯罪 教育 法律 政治 社会 架构 宗教 战争 和 科学 等等 到 了 世纪 初 经济学 在 社会科学 领域 各 方面 不断 扩张 影响力 使得 有些 学者 讽刺 地称 其为 经济学 帝国主义 在 现代 对于 经济学 的 定义 有 数种 说法 其中 有 许多 说法 因为 发展 自 不同 的 领域 或 理论 而 有 截然不同 的 定义 苏格兰 哲学家 和 经济学家 亚当斯 密在 年 将 政治经济学 定义 为 国民 财富 的 性质 和 原因 的 研究 他 说 让 巴蒂斯特 赛伊 在 年 将 经济学 从 公共政策 里 独立 出来 并 定义 其为 对于 财富 之 生产 分配 和 消费 的 学问 另一方面 托马斯 卡莱尔 则 讽刺 的 称 经济学 为 忧郁 的 科学 不过 这一词 最早 是 由 马尔萨斯 在 年 提出 约翰 斯图尔特 密尔 在 年 提出 了 一个 以 社会科学 定义 经济学 的 角度 阿尔弗雷 德 马歇尔 则 在 他 年 的 经济学 原理 一书 中将 经济学 分析 的 领域 从 单纯 财富 创造 扩展 出去 并且 包含 不 只是 社会 上 同时 也 是 个体 上 的 层次 罗宾斯 爵士 则 在 年 提出 了 被 认为 是 到 现在 以来 最 被 广泛 使用 的 经济学 定义 罗宾斯 认为 此 定义 注重 的 不是 以 经济学 研究 某 一些 行为 而是 要 以 分析 的 角度 去 研究 行为 是 如何 被 资源 有限 的 条件 所 改变 一些 人 批评 此 定义 过度 广泛 而且 无法 将 分析 的 范围 局限 在 对于 市场 的 研究 上 然而 自从 年代 起 由于 理性 选择 理论 和 其 引发 的 赛局 理论 不断 将 经济学 的 研究 领域 扩张 这个 定义 已经 获得 广泛 认同 尽管 仍 有 一些 对此 定义 的 批评 存在 经常 以 经济学 作为 分析 其他 领域 学科 的 经济学家 盖瑞 贝克 则 认为 理想 的 经济学 定义 应该 综合 对于 利益 最大化 行为 偏好 稳定 的 特质 以及 市场 均衡 个体 经济学 对于 个体 市场 的 研究 是 建立 在 单一 市场 里 的 行为 并 不 影响 其他 市场 的 假设 上 这种 分析 又 称为 局部 均衡 分析 供给 和 需求 这种 做法 将 经济 行为 的 总和 放在 一个 市场 之上 一般 均衡 理论 则 是 研究 各种 市场 的 行为 研究 的 领域 则 包含 所有 的 市场 研究 的 是 市场 里 的 改变 以及 趋向 均衡 的 过程 机会成本 指 的 是 生产 的 经济 成本 换句话说 就是 选择 不 进行 某 一样 生产 而 其省 下 的 资源 可以 用来 进行 的 次要 理想 的 生产 由于 资本 和 时间 都 是 有限 的 人 只能 从 许多 看起来 理想 又 可行 的 方案 中 选择 一样 进行 这种 问题 又 反映 出 了 稀缺 与 选择 之间 的 消长 由于 任何 经济 行为 都 有 机会成本 存在 这 使得 有限 的 资源 必须 要 被 有效 的 利用 也 因此 进行 经济 行为 的 理性 准则 并 不是 某 一项 行为 好不好 而是 某 一项 行为 是否是 最有 价值 的 选择 对于 机会成本 的 计算 不 只 限于 金钱 上 或 金融 上 的 考量 更 包含 了 计算 实际成本 的 因素 其他 生产 可能 的 损失 以及 休闲 等 会 构成 机会 利益 的 因素 生产 可能性 曲线 是 一种 用以 说明 稀缺 成本 和 效率 的 方式 在 最 简单 的 例子 里 一个 经济体 只 生产 两种 商品 比如 枪械 对比 面包 生产 可能性 曲线 以 图表 如 右图 所示 显示 出 了 在 既定 的 投入 和 技术 之下 于 两种 商品生产 中 取舍 所会 产生 的 不同 产出 在 圆弧 上 的 点 代表 了 可能 的 产出量 也就是说 若 是 一种 产品 生产 多少 另 一种 产品 就 只能 生产 多少 的 情况 稀缺 指 的 是 人们 想要 达成 但是 现有 情况 和 资源 下 无法 达成 的 生产 情况 亦 即 超出 了 生产 可能性 曲线 圆弧 的 地方 例如 图中 的 点 如果 生产 某 产品 的 输出 增加 那么 生产 另 一项 产品 的 输出 必然 会 减少 于是 形成 互相 排斥 的 情况 这 是因为 生产 某样 产品 所 需 的 投入 会 占用 到 生产 另 一样 产品 的 资源 也 因此 减少 了 另 一样 产品 的 产出 生产 一样 产品 所 带来 的 另 一样 产品 输出 的 减少 也 被 称为 实际 机会成本 换句话说 如果 右图 的 情况 下 生产 单位 的 大炮 那么 机会成本 就是 生产 单位 的 黄油 说明 了 在 一个 生产 曲线 上 选择 生产 更 多 的 一样 产品 会 导致 另 一样 产品 的 减少 在 一个 市场经济 下 随着 生产 可能性 曲线 移动 的 经济 脉象 是因为 对 产品 的 需求 改变 而 产生 的 生产 可能性 曲线 的 圆弧 代表 了 某 一种 生产 分配 下 最 有效率 的 生产 状态 如果 我们 选择 在 圆弧 内 的 生产 分配 例如 图中 的 点 这 虽然 是 可以 达成 的 但 却 会 造成 生产 的 低效率 对 投入使用 的 浪费 也就是说 这种 分配 并 没有 达到 最有 生产力 的 点 上 这种 浪费 的 例子 包括 了 如 在 景气 循环 中 高度 的 失业率 或者 是 一个 国家 的 经济 政策 阻挠 生产者 充分 的 利用 他们 的 投入 随着 圆弧 点 进行 的 生产 状态 并不一定 是 最 有 分配 效率 的 亦 即 柏拉图 效率 因为 那 仍然 有 可能 与 消费者 的 需求 不 一致 实用 经济学 理 对于 公共政策 的 研究 大多 聚焦 于 如何 增进 一个 经济 的 效率 找出 如何 调整 社会 组织 以 达成 最 有效 的 资源 生产 被 认为 是 经济学 的 本质 在 观察 上 许多 拥有 类似 科技 水准 和 多元 投入 要素 的 高 发展 国家 例如 西欧 仍然 在 互相 之间 保持 大量 的 贸易往来 这 也 使得 许多 经济学 的 研究 专注 在 解释 经济 里 的 规模 和 聚集 以 解释 在 分工 的 状况 下 生产 不同 产品 的 国家 是 如何 促成 贸易 各国 的 利益 专精 的 理论 可以 套用 在 个体 农场 工厂 服务业 乃至 经济 整体 上 在 这些 生产 体系 里 不同 团体 的 专精 和 互动 都 可能 存在 着 各自 的 分工 或者 是 透过 不同 资本 或 土地 的 投入 达成 类似 的 效果 以 专精 为 例子 一个 专精于 高科技产品 生产 的 已 开发 国家 可以 与 一个 专精于 较 廉价 劳动 生产 的 国家 进行 交易 两者之间 机会成本 的 差异 会 使得 他们 交易 后 得到 更大 的 产出量 与 他们 闭门造车 各自 生产 高科技 和 廉价 劳动 产品 相比 两者 都 可以 从中 获利 投入 和 产出 的 市场 价格 决定 了 分工 的 各方 要 如何 分配 生产 的 投入 廉价 的 投入 会 被 用于 较 廉价 的 产出 上单 在 这个 过程 中 产出 总合 就 有 可能 因为 设计 或 附加 价值 而 有所 提升 这种 生产 上 的 分工 造就 了 贸易 利得 的 机会 使得 资源 的 拥有 人 透过 贸易 把 某种 投入 换成 更为 具有 价值 的 产品 也 因此 而 获利 要 衡量 在 贸易 中 获得 的 利益 则 是 以 衡量 一个 贸易 所 带来 的 收入 水准 的 增加 价格 和 供给 数量 被 认为 是 观察 一个 市场经济 里 生产 产品 最 直接 的 切入点 供给 与 需求 的 理论 解释 了 价格 如何 调节 一个 产品 的 生产 和 消费 在 个体 经济学 里 这 是 假设 了 完全 竞争 的 情况 也就是说 没有 其他 买家 或 卖家 有 足够 市场 力量 单方 设定 价格 在 一个 市场 里 的 商品 需求 指 的 是 所有 买家 要 以 特定 价格 购买 一 单位 产品 时 的 互动 因素 需求 通常 是 以 图表 方式 形容 价格 和 数量 的 需求 如 右图 所示 需求 理论 指 的 是 个体 消费者 如何 理性 的 选择 某种 数量 的 产品 这种 情况 也 被 称为 是 有限 情况 下 的 利益 最大化 一个 人 的 财富 和 收入 则 是 决定 限制 的 主因 利益 在 这里 指 的 是 个体 消费者 如何 在 众多 产品 之间 做 取舍 而 他们 取舍 的 结果 会 将 产品 做 排序 并且 以此 进行 购买 需求 定理 指 的 是 在 一般 情况 下 一个 市场 里 的 需求 的 数量 与 价格 成反比 也就是说 一个 产品 的 价格 越高越 少人会 想 进行 购买 假设 其他 情况 不变 随着 一个 产品 的 价格下降 消费者 会 更 愿意 更 买 它 而 不是 其他 较为 昂贵 的 替代品 另外 因为 价格下降 而 导致 的 购买力 上升 连带 使得 消费者 购买 能力 提高 其他 的 因素 可能 改变 需求 举例来说 收入 的 增加 会 使得 对于 正常 物品 的 需求 曲线 向外 扩张 在 进行 这种 分析 的 时候 经济学家 假设 其他 的 因素 保持 不变 供给 指 的 是 一个 产品 的 价格 以及 在 那个 价格 下会 出现 在 市场 上 的 产品数量 供给 也 可以 由 图表 方式 形容 价格 和 数量 在 这种 模型 下 生产者 比如 公司 被 假设 是 在 追求 利润 的 最大化 也就是说 他们 会试 着 生产 和 提供 市场 的 产品数量 是 他们 认为 会 取得 最大 利润 的 供给 通常 被 表达 为 价格 和 供给 数量 之间 的 关系 假设 其他 情况 不变 换句话说 一个 产品 可以 被 贩卖 的 价格 越高 生产者 便会 越 乐意 提供 这样 产品 如 右图 所示 更 高 的 价格 使得 生产 这样 产品 可以 带来 更高 利润 如同 需求 曲线 供给 曲线 是 可以 移动 的 比如 生产 要素 的 更动 或 技术 的 创新 都 会 导致 供给 曲线 的 移动 需求 定理 指出 若 是 其他 情况 不变价格 的 提高 将会 导致 供给 的 提高 而 价格 的 滑落 将会 导致 供给 的 减少 在 这种 分析 下 经济学家 同样 是 假设 其他 的 条件 维持 不变 比如说 替代品 的 价格 生产成本 以及 其他 众多 会 影响 生产 的 因素 在 分析 时 都 假设 是 不变 的 市场 均衡 指 的 是 当 供给 数量 和 需求 数量 达到 平衡 的 时候 如同 右图 里 所示 两条线 的 交叉点 当 价格 低于 均衡 时 产品 的 需求 会 开始 高过 供给 这会 使得 价格 开始 提高 而 当 价格 超过 均衡点 时 对 产品 的 供给 会 开始 高过 需求 于是 使得 价格 降低 这种 模型 预估 在 任何 供给 和 需求 的 曲线 上 价格 和 供给 会 在 一个 可以 使 产品 需求 等同 产品 供给 的 价格 上 找到 平衡点 同样 的 这个 理论 预估 当 供给 或 需求 任何一方 产生 变动 时新 的 价格 会 产生 以 反映 出新 的 平衡点 对 任何 一种 消费者 产品 来说 需求 曲线 的 位置 决定 了 一个 产品 的 边际 效用 它 决定 了 消费者 要 获得 一个 产品 所 需要 付出 的 代价 供给 曲线 上 的 点 则 代表 了 边际 成本 也 就是 对 生产者 来说 提供 一个 产品 需要 付出 的 成本 在 均衡点 上 的 价格 是 由 供给 与 需求 所 决定 而 在 完全 竞争 的 假设 下 供给 与 需求 将会 等同 均衡点 上 的 边际 成本 和 边际 效用 而 在 市场 的 供给 面 影响 生产 的 因素 则 被 称为 是 生产 变数 这些 变数 在短期内 决定 了 产出 的 数量 有些 投入 变数 可以 被 轻易 更换 例如 电力 原始 资源 加班 工作 等等 其他 的 变数 则 比较 难 更换 例如 工厂 和 机械 或是 重要 的 资深 员工 在 长期 来说 所有 的 投入 都 可以 透过 管理 加以 更改 短期 和 长期 的 分别 又 构成 了 供给 的 价格 弹性 也 就是 供给 面 如何 应对 供给 或 需求方 的 更动 而 产生 新 的 价格 均衡点 边际 主义 描述 消费者 如何 在 不同 的 财富 和 收入 水准 限制 下 达成 对 他们 最 有利 的 位置 而 生产者 也 会 在 各自 生产 的 限制 下 如 产品 需求 科技 价格 等等 试图 最大化 他们 的 利益 对 消费者 来说 他们 利益 最大化 的 位置 在于 当 一个 产品 的 边际 效用 相对 于 其 价格 达到 零 的 时候 用 简单 的 方式 形容 这时 消费者 就 买 到 了 市场 上 对 他 而言 最 划算 的 产品 而 没有 比 这个 产品 更为 有 价值 的 选择 存在 相对 的 生产者 则 会 比较 他们 生产 一个 产品 的 边际 成本 与 边际 收益 亦 即 最 完美 竞争者 的 价格 所 产生 的 差异 便是 边际 利润 当 边际 利润 达到 零时 他们 就 不会 再 继续 生产 某个 产品 市场 迈向 均衡 的 移动 以及 均衡点 价格 和 供给 数量 的 改变 也 是 在 边际 上 进行 也就是说 他们 的 互动关系 的 改变 都 是 相对 的 而 不是 绝对 的 供给 与 需求 理论 的 应用 包含 了 伴 着 生产 要素 调整 的 收入 分配 包含 了 劳动 与 资本 在 市场 上 的 互动 在 一个 有 竞争性 的 劳动 市场 下 在 特定 劳动 价格 亦 即 工资水平 之下 被 雇用 的 劳工 数量 取决于 对于 劳动 的 需求 来自 于 生产者 以及 劳动 的 供给 有 多少 人 在 找 工作 劳动 经济学 检视 的 是 劳工 与 雇主 之间 透过 这样 市场 的 互动 以此 解释 工资 和 其他 劳动收入 劳工 流动性 失业 人力资本 的 产能 以及 其他 相关 的 公共政策 的 变动 与 特征 供给 与 需求 是 用来 解释 完全 竞争 下 的 市场 行为 然而 它 仍然 可以 用来 比较 其他 型态 的 市场 它 也 可以 被 用来 解释 经济体 各 层面 的 变因 举例来说 这 包含 了 总体 经济学 下 研究 的 国内 生产 毛额 以及 物价 经济学家 也 可以 透过 供给 与 需求 来 说明 要 在 何种 特定条件 下 市场 才能 有效 的 分配资源 人们 往往 不会 在 市场 上 直接 交易 而是 透过 公司 进行 工作 和 生产 最 明显 的 公司 是 企业 合伙 以及 信托 依据 罗纳德 科斯 的 说法 当 透过 公司 生产 的 成本 低于 自行 生产 时 个体 便会 选择 透过 公司 生产 公司 综合 了 劳动 和 资本 并且 可以 达到 比 个人 交易 更 高 的 规模 经济 也就是说 当 生产 一个 产品 单位 的 成本 随着 生产 数量 的 增加 而 降低 时 在 完全 竞争 的 研究 模型 下 生产者 众多 而且 对于 市场 价格 都 没有 决定性 的 影响 产业 组织 研究 的 则 是 当 某些 生产者 的确 拥有 决定性 影响 时 公司 之间 的 竞争 行为 它 包含 了 对于 市场 以及 公司 之间 的 互动 常见 的 对于 市场 结构 的 分析 除了 完全 竞争 以外 还有 垄断性 竞争 以及 其他 如寡 占 双头 垄断 等 情形 管理 经济学 是 以 个体 经济学 角度 研究 公司 或 其他 管理 单位 进行 商业 决策 的 过程 这门 研究 相当 倚赖 数据 上 的 统计 比如 对于 运筹学 的 研究 以及 其他 统计 方法 例如 在 没有 完整 资讯 和 确定性 下 的 回归 分析 其 研究 的 特色 是 对于 商业 决策 最佳化 的 追求 包括 了 如何 降低成本 最大化 利益 等 当然 这是 假设 在 其他 情况 例如 科技 和 市场需求 不变 的 条件 下 不确定性 在 经济学 上 是 指 对于 未来 收入 或 损失 无法 预测 的 本质 不管 这 是不是 属于 风险 若 是 没有 了 不确定性 个体 的 经济 行为 就 会 完全 脱离 工作 和 收入 的 不确定性 金融 和 资本 市场 也 会 沦为 单纯 的 市场 阶段 媒介 而 通讯 产业 则 会 完全 消失 由于 不确定性 的 型态 众多 在 经济学 上 有 许多 不同 方式 用来 代表 不确定性 以及 经济 决策者 对 其 的 应对 赛局 理论 是 应用 数学 的 一种 它 研究 的 是 不同 决策者 之间 的 战略 互动 这 也 是 属于 不确定性 的 一种 赛局 理论 提供 了 产业 组织 理论 的 数学 根基 用以 架构 公司 的 各种 行为 举例来说 它 可以 用来 研究 寡占 很少 卖家 的 产业 行为 也 可以 套用 在 工资 谈判 讨价 契约 立定 和 其他 各种 决策者 数量 少到 他们 会 对 彼此 产生 可见 影响 的 情况 上赛局 理论 是 一种 行为 经济学 非常 频繁 使用 的 方法 它 假设 了 个体 们 在 至少 有 部分 利益冲突 的 条件 下 分别 选择 对 他们 最 有利 的 战略 透过 这种 分析 它 可以 将 个体 寻求 利益 最大化 的 举动 用来 研究 例如 供给 与 需求 的 模型 同时 也 考虑 到 资讯 的 不确定性 这门 研究 最早 追溯 至 年 约翰 冯 诺伊曼 的 理论 赛局 理论 对于 众多 领域 都 产生 影响 包括 了 核子 战略 伦理学 政治学 甚至 是 演化 生物学 风险 厌恶 也 会 在 一个 发达 的 经济 里 促使 专门 管理 风险 和 提供 风险 资讯 的 产业 例如 保险业 市场 期货交易 金融 商品 金融 经济学 或 纯粹 的 金融市场 便是 针对 风险 而生 的 产业 这块 领域 同时 也 研究 金融市场 和 公司 的 资本 结构 金融市场 的 效率 和 健康 性 金融危机 以及 政府 对此 的 管制 等等 有 一些 市场 组织 也 会 因为 不确定性 而 产生 低效率 依据 乔治 阿 克洛夫 的 柠檬 市场 理论 这种 低效率 的 典型 例子 之一 是 二手车 市场 由于 消费者 不 确定 一台 车 是否是 有 潜在 问题 他们 往往 会 压低 了 一台 好 的 二手车 的 价格 低于 其 实际 品质 资讯 不 对称 使得 卖家 即使 有 这方面 的 资讯 也 没有 动机 告知 买家 相同 的 保险业 在 这方面 的 问题 则 是 逆向 选择 也就是说 那些 很 容易 冒风险 的 人 也 因此 最 容易 出事 往往 是 那些 最 倾向 于 投保 的 人 也 因此 导致 了 道德风险 使得 保险 反倒 促使 更 冒险 的 行为 这些 问题 都 可能 造成 保险 成本 的 上升 也 因此 驱逐 了 部分 原本 可以 从此 服务 获利 的 人 不 完整 市场 而且 若 是 试图 解决 单一 问题 例如 强制 所有人 保险 那么 仍然 不能 解决 反而 会 创造 出 更 多 道德风险 的 问题 资讯 经济学 便是 对于 这些 问题 的 研究 这 在 许多 领域 如 保险 契约法 机制 设计 货币 经济学 以及 健保上 可以 应用 的 研究成果 包括 了 解决 或 减少 法律 和 市场 上 的 风险 的 措施 比如说 产品 保固 政府 规定 的 部分 保险 资本 重组 或 破产法 以及 其他 对于 资讯 透露 的 管理 市场 失灵 包括 了 许多 不同 的 问题 许多 这些 问题 可能 与 经济学 既有 的 假设 互相冲突 尽管 经济学家 对于 市场 失灵 的 定义 有所 差异 以下 的 分类 经常 被 提出 资讯 不 对称 和 不 完整 市场 可能 会 导致 经济 的 低效率 但 这 有 可能 透过 市场 法律 或 其他 政策 办法 加以 修正 自然 垄断 或者 称为 技术 上 垄断 是 一种 竞争 失灵 的 极端 例子 这种 问题 描述 了 既然 生产 一个 产品 时 生产 越 多 单一 成本 越低 那么 依 此 推断 每个 产品 最终 应该 只有 一个 生产者 才 是 最 有效率 的 公共 物品 依据 市场 失灵 理论 是 一般 市场 是 所 缺乏 供给 的 这种 失灵 的 最 主要 特色 是 人们 可以 使用 公共 物品 而 不必 直接 付费 外部性 指 的 则 是 市场 价格 所 没有 反映 出来 的 外部 社会 成本 或 利益 举例来说 污染 会 造成 负面 的 外部性 而 政府 付费 的 教育 则 会 创造 正面 外部性 如 更 高技术 劳工 政府 经常 向 有 制造 负面 外部性 可能 的 经济 活动 课税 或 进行 禁止 并且 向 正面 外部性 的 受益者 课税 以 企图 矫正 市场 另外 基本 的 供给 与 需求 理论 解释 了 均衡 的 达成 但 并 没有 解释 达到 供需 均衡 所 需要 花费 的 时间 一些 人则 主张 粘性 价格 证明 数量 而 不是 价格 决定 了 供给 与 需求 的 短期 改变 这 也 是 许多 总体 经济学 里 对于 景气 循环 的 标准 研究 研究者 通常 聚焦 于 讨论 粘性 价格 的 成因 以及 达到 长期 均衡 的 过程 有 一些 经济学 领域 专注 于 对 市场 失灵 的 研究 比如 公共 经济学 便是 研究 政府 以 调节 市场 失灵 为名 对 市场 进行 的 干预 解决 市场 失灵 的 政策 方式 包括 了 根据 成本 收益 分析 立定 的 政府 管理 或者 提供 市场 诱因 以 进行 改变 比如 收取 排放 税 尽管如此 许多 经济学家 的 研究 则 提出 质疑 市场 失灵 的 理论 例如 公共 选择 学派 便 提出 了 与 市场 失灵 相反 的 例子 政府 失灵 认为 政治 上 的 经济 干预 和 特殊 利益 才 是 导致 市场 失灵 的 主 因而 奥地利 经济 学派 则 更进一步 主张 低效率 的 垄断 只有 在 政府 主导 之下 才 会 形成 并且 主张 市场 的 低效率 只有 透过 寻求 利润 的 企业家 精神 才能 消除 而 政府 并 不能 做出 正面 影响 公共财政 是 研究 政府 公家机关 如何 进行 预算 和 税收 的 经济学 领域 研究 的 包含 了 税制 的 制定 那些 人 在 缴 那些 税 政府 开支 活动 的 成本 效益 分析 金融 政策 政府 对于 经济 效率 和 收入 分配 的 影响 公共 选择 理论 便是 以 个体 经济学 角度 研究 公共 产业 的 学派 分析 各自 寻求 利益 最大化 的 政治 个体 例如 政客 选民 官僚 和 利益 团体 以及 他们 在 政治 过程 中 的 互动 大部分 的 经济学 都 是 实证 为主 的 以 描述 和 预测 经济 现象 为 重点 而 规范 经济学 则 研究 经济 应该 是 什么 福利 经济学 便是 规范 经济学 的 一种 以 个体 经济学 的 角度 分析 收入 分配 的 效率 并且 以 社会 里 个体 的 经济 行为 来 衡量 社会福利 总体 经济学 将 经济 看作 是 一个 整体 并且 透过 一般 均衡 理论 用 从 上 而 下 的 角度 检视 经济 的 总和 与 互动 这些 总和 包括 了 对于 一国 经济体 的 总 投入 与 输出 失业率 以及 通货膨胀 其他 的 小 总和 则 包括 了 消费 和 投资 总和 等 总体 经济学 也 专注 于 研究 货币政策 和 财政政策 上 自从 年代 以来 总体 经济学 也 被 引进 一些 个体 经济学 的 划分 方式 例如 分析 个体 的 理性 效率 市场 假说 以及 不 完全 竞争 等 这些 发展 解决 了 部份 对于 这些 领域 的 不一致性 质疑 总体 经济学 同时 考量 影响 成长 和 国家 收入 的 因素 这些 因素 包括 了 资本 累积 科技进步 以及 劳动力 的 成长 等 成长 经济学 研究 的 是 造就 经济 成长 的 因素 亦 即 许多 被 广泛 研究 的 因素 包括 了 投资 的 比例 人口 成长 以及 科技 变革 这些 研究 包括 了 理论 上 和 观察 上 的 形式 如同 新古典主义 经济 增长 模型 以及 增长 核算 对于 经济 萧条 的 研究 促使 了 总体 经济学 的 诞生 在 年代 的 经济 大 恐慌 时 约翰 梅纳德 凯恩斯 出版 了 就业 利息 和 货币 通论 一书 建构 了 凯恩斯主义 的 主要 理论 凯恩斯 认为 在 经济 萧条 时 对于 产品 的 总需求 可能 有 不足 的 现象 导致 高 失业率 以及 可能 的 产能 流失 他 于是 认为 应该 增加 政府 在 公共 产业 的 活动 包括 了 以 中央银行 实行 扩张性 的 货币政策 和 财政政策 以 稳定 景气 循环 也 因此 凯恩斯主义 的 一大 结论 为 在 某些 情况 下 市场 本身 并 不能 将 产出 和 雇佣 推 到 充分就业 的 程度 约翰 希克斯 的 模型 便是 解释 凯恩斯 理论 的 经典 例子 随着 时间 发展 对于 景气 循环 的 认知 也 逐渐 增进 并 扩张 到 其他 领域 大多 是 作为 对 凯恩斯 理论 的 回应 新 古典 综合 学派 便是 综合 凯恩斯 经济学 与 新古典主义 经济学 认为 凯恩斯主义 虽然 在 短期 上 是 正确 的 但 新古典主义 则 在 中长期 更 有 解释 说服力 新兴 古典 经济 学派 则 从 凯恩斯 景气 循环 理论 中 脱出 认为 市场 的 萧条 是因为 不 完全 资讯所 造成 的 持 这种 立场 的 包括 了 米尔顿 傅利曼 对于 消费 的 恒常 所得 假说 以及 小 罗伯特 卢卡斯 提出 的 理性 选择 理论 相 较 之下 新兴 凯恩斯 学派 则 保留 了 对 理性 预期 的 假设 但 将 景气 循环 归咎于 市场 失灵 上 新兴 凯恩斯 学派 认为 价格 和 工资 是 有 粘性 的 亦 即 他们 不会 随着 经济 情况 的 变动 而 很快 做出 调整 也 因此 新古典主义 学派 认为 价格 和 工资 会 自动 调整 以 达成 充分就业 而 新兴 凯恩斯 学派 则 认为 充分就业 只有 在 长期 上 才 会 自动 达成 也 因此 短期内 必须 要 有 政府 和 中央银行 介入 另一方面 与 凯恩斯 学派 对立 的 奥地利 经济 学派 则 认为 景气 循环 是 由于 政府 透过 中央银行 释出 过多 的 借贷 资金 因而 导致 资本 借贷 的 过度 容易 从而 致使 企业家 的 错误 投资 和 资本 的 错误 分配 因而 形成 信用 泡沫 他们 认为 景气 循环 里 的 扩张期 是 对于 资本 的 滥用 期而 紧接 而来 的 衰退期 才 是 经济 复苏 的 开始 奥地利 学派 的 理论 不 被 凯恩斯 学派 或 新古典主义 学派 所 重视 然而 在 学界 仍然 有 部分 支持者 一个 经济体 里 的 失业人数 可以 由 失业率 来 计算 亦 即 有 多少 劳工 在 积极 的 寻找 工作 退休者 正 接受 教育者 或 因为 其他 因素 而 放弃 寻找 工作者 并 不 包含 在 失业者 里 失业 可以 依据 几种 型态 来 分类 古典式 失业 指 的 是 当 工资 太高 因而 导致 雇主 不愿 雇用 更 多 劳工 时 工资 太高 的 原因 可能 是 最低工资 法规 或是 工会 的 活动 导致 依据 古典式 失业 说法 摩擦性 失业 则 是 当 市场 有 应对 的 工作 存在 但 在 配对 工作 的 过程 中 劳工 所 需要 寻找 和 等待 的 时间 结构性 失业 则 包含 一系列 导致 失业 的 原因 比如 劳工 有 的 技能 与 市场 需要 的 技能 不 同时 当 一个 经济体 的 产业 正 进行 大规模 的 转变 时 因为 许多 劳工 既有 的 技能 与 新兴产业 不同 许多 结构性 失业 便 有 可能 发生 无论 经济体 所处 的 情况 某些 程度 的 失业 都 有 可能 持续 存在 不过 凯恩斯 学派 主张 当 经济 停止 成长 时 因为 总需求 不足 所 产生 的 周期性 失业 就 有 可能 发生 奥肯 法则 便是 对于 失业率 与 经济 成长 的 观察 原始 的 奥肯 法则 指出 的 经济 产出 成长 便会 降低 的 失业率 在 大多数 市场经济 下 货币 是 一种 用以 作为 交易 媒介 的 工具 假设 在 没有 通货膨胀 的 情况 下 货币 比起 其他 形式 的 交易 媒介 例如 贝壳 银条 黄金 要 更 来 的 有 价值 稳定性 可 切分 性 简便性 以及 更 流动 的 供给 货币 包含 了 大众 持有 的 纸钞 和 积蓄 以及 银行 和 政府 具有 的 备用 资金 货币 就 好比 是 像 语言 一般 的 社会 媒介 其 价值 存在 于 与 他人 互动 的 功能 上 若 是 没有 其他 交易 的 对象 那么 再 多 的 钱 也 等同 废纸 作为 一种 交易 媒介 货币 让 交易 变得 更为 容易 它 使 人们 可以 更 简单 的 估价 产品 和 服务 同时 也 促使 储蓄 的 产生 与 货币 对比 的 是 以物 易物 的 交易方式 没有 了 货币 便 要 以 更 困难 的 物质 配对 交易 双方 的 需求 比如 苹果 交换 书本 由于 货币 的 通用性 它 使得 交易 的 交易成本 得以 降低 如此一来 生产者 便 可以 轻易 将 产出 换 为 市场 通用 的 价值 而 不 需 转换 必须 进行 二次 交易 的 物品 对 一个 经济体 而言 货币 供给 与 总 生产 的 面值 和 物价 水准 有 密切关系 也 因此 管理 货币 供给 是 货币政策 的 重要 课题 凯恩斯 学派 认为 政府 应该 透过 对于 财政政策 的 操弄 来 调整 总需求 他们 主张 当 总需求 低于 经济体 存在 的 生产 潜能 时 这种 没有 使用 到 的 生产能力 便 形成 了 产出 浪费 依据 这种 说法 政府 透过 增加 财政支出 的 方式 透过 赤字 支出 课税 或是 通货膨胀 来 鼓励 总需求 成长 如此一来 便 运用 到 没有 被 使用 的 生产 潜能 举例来说 即使 在 没有 实际 需要 的 情况 下 政府 也 可以 雇用 失业 劳工 来 兴建 高速公路 如此一来 便会 发挥 他们 的 生产 潜能 而 这种 支出 也 有 乘数 效应 亦 即 为 应付 扩张性 财政政策 而 产生 的 商机 构成 了 多出 的 经济 活动 当然 这种 理论 是 根基 在 没有 考虑 到 挤出 效应 的 假设 上 如果 产出 浪费 并 不 存在 那 经济体 便是 以 完全 的 产能 在 运作 这时 如果 政府 介入 增加 财政支出 便会 挤压 到 民间 产业 的 经济 活动 也 因此 不会 产生 经济 增长 支持 扩张性 财政 者 认为 挤出 效应 只有 在 没有 产出 浪费 时才 会 出现 而 反对 的 经济学家 认为 这种 效应 是 永远 存在 的 并且 指出 李嘉图 等价 理论 他们 主张 政府 借贷 必然 需要 以 未来 的 课税 增加 来 偿还 而 任何 因为 政府 财政政策 所 引起 的 需求 增长 都 会 因为 民间 为 应付 未来 高 税率 的 储蓄 而 被 消除 国际 经济学 研究 国与国 之间 的 贸易往来 并且 研究 国际贸易 可以 带来 的 贸易 利 得 重要 的 政策 研究 包括 了 关税 以及 贸易壁垒 对于 进出口 和 经济 成长 的 影响 国际 金融学 则 是 整体 经济学 里 一门 专门 研究 资本 如何 在 各国 之间 流动 的 领域 并且 研究 汇率 国际贸易 的 增长 各国 分工 的 增强 和 密集 化是 全球化 重要 的 来源 发展经济学 则 是 研究 在 发展 程度 相对 落后 的 开发 中 国家 并且 研究 产业 改变 贫穷 和 经济 成长 与 其他 经济学 领域 不同 的 是 发展经济学 经常 结合 社会 与 政治 的 议题 作为 考量 经济 体系 是 经济学 里 研究 各国 经济 体系 差异 的 领域 研究 的 重点 包括 了 各国 在 经济 路线 发展 策略 产权保护 以及 经济 资源分配 等 指标 上 的 差异 这门 领域 的 研究 是 以 一个 经济 体系 作为 最 基本 的 研究 单位 在 当代 经济 体系 里 经济 组织 的 两大 不同 路线 为 社会主义 体制 和 资本主义 体制 一者 是 以 国家 统御 经济 另 一者 则 是 以 自由市场 来 进行 而 这 两者之间 的 中间 路线 为 混合经济 研究 经济 体系 与 政治体制 之间 的 互动 也 被 称为 政治经济学 经济 体系 比较 指 的 则 是 衡量 不同 经济 体系 之间 的 经济 行为 和 成长 差异 当代 的 经济学 经常 使用 数学 作为 研究 手段 之一 经济学家 使用 的 研究 工具 包括 了 微积分 线性代数 统计学 赛局 理论 以及 电脑 科学 学术界 的 经济学家 一般 都 有 使用 这些 工具 的 基本 能力 少数 经济学家 则 专注 在 数理经济学 和 其他 数学 的 方式 主流 经济学 理论 依靠 的 是 经济模型 并 从中 衍生 众多 概念 这些 经济 论述 通常 假设 在 其他 情况 保持 不变 之下 研究 聚焦 的 变数 是 如何 因应 各种 条件 进行 改变 当 进行 经济学 论述 时 经济学家 重视 的 是 寻找 可以 以 最少 观察 资讯 来 实证 最为 明确 表达 同时 可以 衍生 出 其他 研究 的 理论 在 个体 经济学 下 主要 的 研究 概念 为 供给 与 需求 边际 主义 理性 选择 理论 机会成本 预算 线 效用 以及 公司 研究 而 总体 经济学 早期 则 聚焦 于 对于 总体 变因 的 模型 建构 然而 随着 时间 发展 这种 路线 逐渐 被 淘汰 取而代之 的 研究 则 更 注重 于 以 个体 基础 出发 的 总体 研究 个体 经济学 的 许多 概念 对 总体 经济学 的 领域 都 起 了 重大 影响 例如 货币政策 上 货币主义 主张 的 货币 数量 论 指出 对 货币 的 供给 扩张 会 因为 市场 的 理性 预期 而 造成 通货膨胀 在 发展经济学 中 已 开发 国家 一般 被 预测 会 有 比较 小幅度 的 经济 成长 因为 资本 投资 的 边际 回收 会 随着 发展 程度 而 开始 下降 这种 趋势 就 在 亚洲 四小龙 的 发展 上 被 观察 到 有时候 这些 经济 假说 所 主张 的 只是 一种 定向 或 趋势 而 非 绝对 的 数据 改变 在 近 几十年 赛局 理论 于 社会科学 领域 的 急速 扩张 也 对 经济学 产生 巨大 影响 透过 例如 纳什 均衡点 作为 研究 经济 个体 决策 的 基准 经济学家 可以 在 不 依靠 实际 世界 资料 的 情况 下 对 许多 领域 做出 分析 和 预测 标准 的 赛局 理论 经济学 论述 通常 先 设计 一个 与 现有 经济 问题 类似 的 赛局 经济学家 并 以赛 局里 的 单方 行为 和 多方 互动 来 研究 他们 如何 在 不同 规则 下 进行 利益 最大化 经济 理论 经常 被 用 观察 上 的 方法 加以 验证 通常 是 透过 计量经济学 来 检视 经济 数据 一般 实体 科学 常见 的 封闭 实验 在 经济学 上 是 很 难 达成 而且 很少 见 的 也 因此 经济学家 通常 倚赖 观察 既有 资料 的 方式 来 测试 他们 的 理论 虽然 这样 观察 实验 的 结果 没有 封闭 实验 来 的 准确 也 比要 容易 被 质疑 尽管如此 实验 经济学 是 一门 逐渐 在 成长 的 领域 而且 对 既有 模型 的 观察 也 在 增加 统计学 的 研究 方法 例如 回归 分析 也 很 常见 使用者 用此 方法 来 估计 规模 经济 重要性 以及 统计 显着性 藉此 来 提出 假说 并且 控制变 因 的 影响 透过 这种 作法 一个 假说 有 可能 因此 获得 支持 尽管 其 准确性 仍然 只是 机率 上 的 而 不是 绝对 的 判断 研究 的 标准 则 是 依靠 其 可否 证性 以及 证伪 结果 由于 实验 结果 的 不确定性 这些 观察 研究 并不一定 要 对 其 研究 问题 提出 决定性 的 结论 甚至 也 不 一定 要 提出 主要 的 发现 在 实用 经济学 领域 上以 线性规划 来 进行 投入产出 模型 的 研究 相当 常见 为了 研究 某种 政策 对 各 方面 的 影响 经济学家 常将 大量 资料 交由 电脑 统计分析 专业 的 同行 评审 和 对于 结果 的 重新 生成 也 能 进一步 确保 观察 实验 不会 产生 有 偏见 的 错误 的 或 轻率 概化 的 结果 尽管 经济学 许多 研究 领域 都 常 被 批评 是 无法 重生 研究 结果 的 如同 纯粹 的 理论 对于 统计 实验 的 使用 也 会 受到 批判 分析 尽管如此 在 过去 年间 单纯 为 批评 其他 研究 结果 的 文章 在 如 美国 经济 评论 的 期刊 上 一直 减少 这 被 认为 是 期刊 试图 增加 其 引用 数量 的 一种 结果 实验 经济学 也 造就 了 许多 以 封闭式 对照 实验 为 方法 的 研究 直接 测试 一般 被 视为 真理 的 一些 经济学 理论 这 将 传统 上 经济学 与 自然科学 的 区分 给 缩小 了 例如 最后通牒 赛局 的 实验 结果 便 证实 了 人们 会 拒绝接受 不 平等 的 分配 方式 在 行为 经济学 上 心理学家 丹尼尔 卡内 曼 与 阿摩 司特 沃斯基 一起 因为 他们 对于 展望 理论 和 认知 偏差 的 发现 而 获得 年 的 诺贝尔经济学奖 在 神经 经济学 上 的 观察 实验 也 证实 了 类似 结果 另外 一个 例子 则 是 对照 传统 的 私利 偏好 假设 与 一个 可以 测试 自 私利 他 与 合作 倾向 的 模型 这些 研究 的 进展 使得 一些 人 主张 经济学 也 是 真正 的 科学 的 一部分 经济学 这一 领域 的 专业化 反映 在 这个 领域 的 研究所 课程 的 成长 上 并且 被 称为 是 经济学 自年 来 的 重大 改变 大多数 主要 的 大学 和 院校 都 有 一个 专精 的 经济 院所 并 颁发 经济学 的 学位 不论是 在 通识 教育 商业 或 其他 专业 领域 上 经济学 课程 往往 是 必修 的 课程 诺贝尔经济学奖 在 每年 会 依据 其 专家 评审 颁发 给 对 这个 领域 有 重大贡献 的 经济学家 在 私人企业 经济学家 通常 担任 顾问 的 角色 尤其 是 在 银行业 和 金融业 经济学家 也 替 众多 政府部门 服务 例如 国库 中央银行 和 统计 组织 法律 经济学 是 一种 以 经济 理论 角度 切入 研究 法学 的 方式 包含 了 以 经济学 解释 法律 产生 的 经济 影响 研究 法律 是否 有助 或 有害 于 经济效益 以及 预测 未来 经济法 走向 罗纳德 科斯 在 年 的 文章 里 就 曾 主张 对于 产权 的 良好 保护 可以 克服 市场 的 外部性 政治经济学 是 一门 结合 经济学 法学 以及 政治学 的 研究 针对 在 探讨 政治 制度 政治 环境 以及 经济体制 如 资本主义 或 社会主义 之间 的 互动 政治经济学 研究 的 包含 了 如 垄断 和 寻租 行为 以及 外部性 与 政府 政策 的 关系 历史学家 有时 会 使用 政治经济学 一词 来 描述 研究 在历史上 有 特定 利益 的 个人 或 团体 是 如何 利用 政治 手段 来 取得 利益 经济学 的 社会学 分支 也 透过 经济 社会学 发展 出来 主要 是 根基 在 爱 米尔 涂尔干 马克斯 韦伯 格奥尔 格 齐美尔 等 人 的 作品 上 用以 分析 经济 发展 和 经济 现象 对于 社会 传统 的 影响 对 经济学 的 研究 最早 可以 追溯 至 美索不达米亚 古希腊 古罗马 中国 波斯 以及 阿拉伯 文明 世纪 之前 知名 的 学者 包括 了 亚里 斯多德 考底 利耶 汤玛斯 阿奎那 伊本 赫勒敦 等 人 受到 亚里 斯多德 写作 的 启发 阿奎那 对 其 后代 至 世纪 的 经院哲学 有 许多 贡献 由 经院哲学 所 衍生 的 萨拉曼 卡 学派 也 成为 中 世纪末 第一个 有 系统性 地以 自然法 研究 货币 利息 以及 价值 理论 等 经济 法则 的 经济 学派 在 文艺复兴 之后 经济学 的 发展 开始 由 重商主义 和 重农主义 两派 所 支配 这 两个 学派 都 对 欧洲 经济 民族主义 和 现代 资本主义 的 发展 有 相当 影响 重商主义 在 至 世纪 盛行于 一些 商人 和 政客 之间 主张 一国 之 财富 是 靠着 累积 金银 而来 的 而 没有 天然 金矿 银矿 的 国家 则 只能 靠着 出口 产品 并且 限制 进口 金银 以外 货物 来 累积 财富 重商主义 主张 进口 便宜 的 原始 资源 以 用来 生产 出口 的 货物 并且 以 关税 防止 来自 国外 产品 的 竞争 重农主义 则 是 一群 世纪 的 法国 思想家 组成 并 认为 经济体 是 一个 收入 和 产出 不断 循环 的 圈圈 他们 主张 只有 农业 生产 才 能够 产出 超过 成本 的 价值 也 因此 农业 是 所有 产业 的 根基 他们 反对 重商主义 对 制造业 和 出口 的 重视 而 忽略 了 农业 重农主义 者 并且 主张 淘汰 耗费 大量 成本 的 税金 收取 制度 改 以 地主 的 所得税 替代 之 比起 重商主义 重农主义 者 更 支持 自由放任 的 政策 认为 政府 不该 干预 经济 亚当斯 密 被 认为 是 现代 经济学 的 开端 他 对于 当时 的 重商主义 提出 众多 批评 并 认为 重农主义 尽管 并 不 完美 但 仍然 是 更为 接近 经济学 真相 的 框架 亚当斯 密在 年 出版 的 国富论 一书 被 认为 是 造就 了 经济学 诞生 的 起始 点 这 本书 将 土地 劳动 以及 资本 视为 是 生产 的 三大 要素 以及 生产 一国 财富 的 来源 而 抛弃 了 重农主义 认为 只有 农业 活动 才 有 生产性 的 理论 斯密 讨论 了 分工 可以 带来 的 经济 好处 包括 了 劳动 产能 的 上升 以及 贸易 利 得 无论是 乡村 或是 都市 或是 不同 国家 之间 都 可以 藉此 获利 他 的 理论 认为 分工 的 程度 是 由 市场 的 需求 所 决定 这 也 成为 了 后代 经济学家 对于 公司 和 产业 组织 的 主要 理论 来源 亚当斯 密 提出 了 被 广泛 认为 是 经济学 里 最 重要 的 命题 亦 即 在 竞争 之下 资源 的 持有人 无论是 劳动力 土地 还是 资本 会 寻求 利益 最大化 的 途径 于是 在 均衡 之下 所有 同一 资源 的 持有人 都 会 获得 相同 的 报酬 排除 失业 等 因素 外 斯密 认为 所有 个体 会 利用 他们 持有 的 任何 资本 来 增进 其 自身 的 利润 和 福利 而 非 社会 的 利益 这 在 后来 被 称为 是 经济学 上 最 重要 的 一段话 斯密 并且 主张 个体 寻求 利润 的 动机 是 生产 过程 中 所 不可或缺 的 他们 获得 的 利润 就 代表 了 他们 所 生产 出 的 价值 他 这样 说道 因此 由于 每个 个人 都 会 尽力 把 他 的 资本 用以 支持 并 管理 国内 的 产业 这些 产业 的 生产 于是 便 能 达到 最大 的 价值 每个 个人 也 必然 竭力 的 使 社会 的 年收入 尽量 扩大 确实 他 通常 并 没有 打算 要 促进 公共 的 利益 也 不 知道 他 自己 促进 了 这种 利益 至 何种 程度 由于 宁愿 支持 国内 的 产业 而 非 国外 的 产业 他 只是 盘算着 他 自己 的 安全 他 管理 产业 的 方式 在于 使 其 生产 的 价值 能够 最大化 他 所 盘算 的 也 只是 他 自己 的 利益 在 这些 常见 的 情况 下 经过 一双 看不见 的 手 的 引导 他 也 同时 促进 了 他 原先 无意 达成 的 目标 并非 出自 本意 并 不 代表 就 对 社会 有害 藉由 追求 他 个人 的 利益 往往 也 使 他 更为 有效 地 促进 了 这个 社会 的 利益 而 超出 他 原先 的 意料之外 我 从来 没有 听说 过有 多少 好事 是 由 那些 佯装 增进 公共利益 而 干预 贸易 的 人 所 达成 的 亚当斯 密 提出 的 看不见 的 手 的 概念 与 他 对于 经济 发展 和 经济 成长 的 重视 有 密切关系 他 认为 经济 上 的 增长 使得 社会 大众 可以 进行 更 多 更 有 价值 的 消费 这 在 他 心目 中才 是 所有 生产 的 唯一 目的 斯密 并且 以 看不见 的 手来 评论 众多 的 经济学 领域 包括 了 政府 对于 竞争 贸易 的 限制 以及 银行 和 利息 并 提出 他 认为 是 自由 的 既定 体制 包括 了 国防 公平 的 司法制度 一些 可以 造福 全 社会 的 公共 工程 以及 提供 教育 道路 水坝 等等 现代 的 经济学 教科书 常 把 亚当斯 密 的 看不见 的 手 作为 解释 经济学 的 最 基本概念 同 时期 的 托马斯 马尔萨斯 则 利用 报酬 递减 来 解释 生活 水平 他 预言 人类 人口 会以 几何 方式 倍增 但 粮食 生产 却 只会 渐进 的 增加 如此一来 有限 的 土地 便会 导致 暴增 的 人口 劳动力 产能 报酬 递减 于是 便会 导致 生活 水平 大幅 退步 的 人口过剩 出现 马尔萨斯 并且 质疑 市场经济 的 调节 性能 批评 市场 本身 无法 达成 完全 就业 并且 称 经济体 倾向 于 过度 存款 而 导致 消费 不足 这一 理论 后来 也 被 凯恩斯 加以 利用 亚当斯 密 注重 在 财富 的 生产 上 而 大卫 李嘉图 则 注重 在 收入 的 分配 李嘉图 认为 地主 与 资本 和 劳工 之间 必然 会 有 冲突 存在 他 主张 随着 人口 的 成长 和 生产 增加 有限 的 土地 必然 会 使得 租金 逐渐 上涨 于是 减低 资本 获得 的 利润 以及 劳工 的 工资 李嘉图 是 第一个 提出 了 比较 优势 的 经济学家 依据 此 理论 无论 一国 是否 在 生产 上 每个 层面 都 比 他国 优越 或 落后 边际 的 生产成本 差异 使得 他们 都 可以 从 国际贸易 过程 中 获利 比较 利益 到 今天 一直 被 经济学家 认为 是 解释 贸易 利得 的 最 基本 框架 到 了 古典 经济学 的 末期 一些 人 开始 对 其 假设 提出 质疑 比如 约翰 斯图尔特 密尔便 提出 市场 分配 收入 的 问题 他 认为 市场 扮演 了 两个 主要 的 角色 资源 的 分配 以及 收入 的 分配 他 认为 市场 在 分配资源 上 可能 是 最 有效 的 但 不 一定 可以 最好 的 分配 收入 于是 产生 社会 介入 的 需要 价值 理论 是 古典 经济学 重要 的 一部分 亚当斯 密常 被 认为 是 提出 一个 产品 的 交换价值 是 由 其 劳动所 决定 的 人 不过 斯密 其实 在 这方面 有所 保留 比如 他 说 所有 东西 的 真正 价值 取决于 取得 这样 东西 的 难度 斯密 认为 除了 工资 以外 的 因素 也 影响 了 产品 的 价格 尽管如此 许多 古典 经济学家 开始 以 斯密 为 基础 提出 了 劳动 价值 理论 主张 劳动 是 价值 的 主要 或 唯一 来源 马克思主义 经济学 是从 古典 经济学 里 衍生 而出 的 卡尔 马克思 提出 了 其 理论 的 基本 模型 马克思 在 年 出版 了 资本论 一书以 劳动 价值 理论 为 基础 主张 资本主义 的 生产 模式 必然 会 产生 剩余价值 也 就是 资本 对于 劳工 的 剥削 依据 劳动 价值 理论 一个 产品 的 价值 是 由 生产 过程 中 所 必需 的 社会 劳动所 决定 的 而 剩余价值 理论 则 主张 劳工 的 工资 只 构成 了 产品价格 里 的 劳动 价值 的 一部分 从此 认为 有 剥削 存在 从 年 至 年 之间 一系列 经济学家 开始 对 古典 经济学 的 假设 提出 挑战 这 一系列 的 变革 后来 被 称为 是 边际 革命 由 英格兰 的 威廉姆斯 坦利 杰文斯 奥地利 的 卡尔 门格尔 和 瑞士 的 利昂 瓦尔拉 斯所 各自 提出 边际 主义 否定 了 古典 经济学 的 劳动 价值 理论 认为 价值 是 由 边际 效用 而 非 劳动所 决定 的 边际 主义 不但 解决 了 古典 经济学 所 无法解释 的 钻石 与 水 悖论 同时 也 促生 了 成为 现代 新 古典 经济学 骨架 的 主观 价值 理论 世纪末 的 边际 革命 是 经济学 的 一大 分水岭 古典 经济学 重视 的 是 社会活动 间 的 因果关系 例如 财富 的 生产 和 分配 以及 透过 政治经济学 分析 不同 政体 下 财富 分配 结构 随着 边际 效用 概念 的 提出 对于 生产 和 交易 的 研究 得以 从 社会 理论 如 马克思主义 中 分离出来 而 迈向 科学性 的 分析 这种 改变 使得 经济学 得以 脱离 受到 价值 判断 影响 的 规范 经济学 不再 聚焦 于 社会 和 生产 应该 怎么样 的 问题 而是 研究 现实 世界 是 什么 进而 成为 客观 而 具有 科学性 的 学问 凯恩斯主义 经济学 发展 自 约翰 梅纳德 凯 因斯 年 出版 的 就业 利息 与 货币 的 一般 理论 一书 此书 确立 了 总体 经济学 一 领域 的 独立 凯恩斯 在 此书 中 研究 许多 在 短期 亦 即 长期 的 经济 均衡 达到 之前 影响 总收入 和 生产 的 因素 他 认为 高度 的 失业 可能 会 因为 市场 缺乏 有效 需求 而 无法 自行 调整 并且 主张 为了 增加 总需求 政府 应该 透过 扩张性 的 财政政策 来 克服 这种 情况 在 当时 经济 大 恐慌 的 环境 下 凯恩斯 的 此 一 理论 对 经济学界 产生 重大 影响 随着 时间 发展 凯恩斯 学派 出现 两个 分支 后 凯恩斯 学派 注重 于 研究 总体 经济学 的 弹性 缺乏 以及 调整 过程 另外 他们 在 个体 经济学 上 则 以 实际 世界 的 观察 例子 来 作为 研究 基础 而 非 透过 利益 最大化 的 模型 该 学派 的 主要 人物 有琼 罗宾逊 等 人 新兴 凯恩斯 学派 同样 也 是 衍生 自 原始 的 凯恩斯主义 此 流派 同意 其他 经济学家 利用 利益 最大化 来 解释 个体 经济学 的 模型 但 提出 了 价格 和 工资 粘性 的 理论 用以 更新 原始 的 凯恩斯主义 尽管 他们 对 原始 框架 的 支持 已经 转变 为 强调 其 持续 出现 特征 而 不是 坚持 其 存在 的 本质 边际 革命 促生 了 主导 当代 主流 经济学 的 新古典主义 经济学 阿尔弗雷 德 马歇尔 提出 了 经济学 一词 来 形容 对于 经济 科学 的 研究 用以 对照 之前 的 政治经济学 这种 转变 就 有如 在 当时 数学模型 对于 自然科学 的 影响 新古典主义 经济学 将 供给 与 需求 作为 分析 市场 均衡 下 价格 和 供给 数量 的 模型 以此 解释 产出 以及 收入 的 分配 比起 古典 经济学 新古典主义 重视 的 是 市场 的 边际 需求 到 了 世纪 新古典主义 经济学 远离 了 古典 经济学 以 基数 作为 分析 个体 之间 生产关系 和 社会 总和 利益 的 方式 在 个体 经济学 方面 新古典主义 认为 动机 和 机会成本 构成 了 决策 的 最 重要 基准 例子 之一 是 消费者 理论 分析 价格 也 就是 成本 以及 收入 是 如何 影响 需求 的 数量 而 在 总体 经济学 上 与 凯恩斯主义 综合 的 新 古典 综合 学派 成为 当今 总体 经济学 的 主流 新古典主义 经济学 经常 被 称为 是 正统 经济学 现代 的 主流 经济学 教科书 大多 是 以 新古典主义 为 基础 虽然 在 许多 方面 也 有 改动 或是 重视 不同 的 领域 例如 计量经济学 赛局 理论 对于 市场 失灵 和 不 完全 竞争 的 分析 等 年代 出现 的 停滞 性 通货膨胀 直接 挑战 了 凯恩斯主义 的 基本 假设 依据 菲利普斯 曲线 凯恩斯主义 认为 通货膨胀 会 使得 物价 提高 由此 带动 产业 雇用 更 多 劳工 以 增大 产能 而 更 高 的 雇用 度则 会 带动 需求面 然而 在 至 年代 同时 出现 了 通货膨胀 和 高 失业率 这 使得 原先 支配 总体 经济学 的 凯恩斯主义 开始 备受 质疑 在 这种 背景 下 芝加哥 经济 学派 和 其 衍生 的 货币主义 开始 挑战 凯恩斯主义 依据 该 学派 的 米尔顿 傅利曼 等 人 的 说法 市场经济 在 货币 供给 持平 亦 即 没有 过多 的 膨胀 或 紧缩 的 条件 下 可以 自行 调整 供需 依据 这种 理论 政府 的 角色 是 透过 中央银行 调控 在 经济体 中 流通 的 货币 数量 除此之外 不 需要 干预 自由市场 的 活动 芝加哥 学派 以及 后来 小 罗伯特 卢卡斯 提出 的 理性 预期 理论 大幅度 取代 了 凯恩斯主义 在 总体 经济学 的 支配 地位 现任 的 美国联邦 准备 理事会 主席 本 伯南克 便是 支持 傅利曼 解释 景气 循环 说法 的 经济学家 之一 当代 的 主流 经济学 经常 被 二 分为 美国 东海岸 与 西海岸 大学 代表 的 咸水 学派 与 芝加哥 等 内地 大学 代表 的 淡水 学派 米尔顿 傅利曼 基本上 采纳 了 许多 亚当斯 密 和 其他 古典 经济学家 提出 的 个体 经济学 概念 并且 将 之 现代化 比如 他 在 年 曾 主张 一个 企业 的 社会 责任 是 要 在 自由市场 的 竞争 下 努力 利用 既有 资源 进行 可以 最大化 利润 的 商业活动 这一 说法 与 亚当斯 密 认为 市场 通过 私利 可以 最好 达成 社会 总 利益 的 看法 一致 一些 在 主流 经济学 以外 的 经济 学派 和 研究 方式 也 对 经济学 领域 有 重大 和 持续 的 影响 比如 奥地利 经济 学派 洛桑 学派 后 凯恩斯 学派 斯德哥尔摩 学派 等 与 新古典主义 经济学 平行 发展 的 奥地利 经济 学派 便是 衍生 自 边际 革命 的 重要 人物 卡尔 门格尔 的 理论 而 其 许多 研究 框架 也 与 主流 经济学 有 高度 重迭 世纪 维多利亚 时代 历史学家 托马斯 卡莱尔 曾 讽刺 的 称 经济学 为 忧郁 的 科学 一些 经济学家 如 约翰 斯图尔特 密尔 和 里昂 瓦尔拉 斯则 认为 对 经济学 的 研究 不该 与其 产出 的 分配 混为一谈 他们 认为 后者 所 牵涉 的 社会 经济学 是 属于 政治学 的 领域 在 国富论 一书中 亚当斯 密 大力 抨击 那些 他 认为 是 依赖 政治 权力 来 影响 市场运作 的 个人 或 团体 在 斯密 的 年代 这些 人 通常 被 称为 派系 今天 则 是 我们 所 熟知 的 利益 团体 例如 政党 银行 公司 工会 等等 作为 社会科学 的 一部分 经济学 研究 应该 要 独立 于 政府 政策 或 其他 决策 团体 的 影响 之外 然而 政策 制定者 和 政治 人物 经常 以 特定 经济学 的 理论 或 说词 来 正当 化 他们 推动 的 政治 议程 许多 时候 往往 脱离 他们 公职 的 负责 领域 经济学 理论 在实践上 与 政治 不可避免 的 密切 关连 经常 被 拿来 做 为 批评 的 对象 批评者 往往 将 经济学 作为 一个 学术 领域 的 角色 与 特定 议题 或 价值观 混为一谈 尽管如此 经济学 对于 政府 经济 政策 的 形成 是 理所当然 有 影响力 的 而且 在 某种程度 上 可以 说 是 政治经济学 的 分支 许多 学术界 的 期刊 经常 探讨 经济 学者 之间 对于 某种 政策 的 共识 或 主流 立场 为何 希望 以此 增加 专业 意见 在 政治 决策 上 的 角色 事实上 当今 的 主流 经济学界 与 一些 普遍存在 政治 讨论 的 看法 往往 抱持 截然不同 的 立场 举例来说 贸易 保护主义 在 大众 舆论 和 政客 之间 普遍 流传 然而 经济学家 却 一面倒 的 认为 自由贸易 才 是 增进 社会 整体利益 的 方式 依据 美国 经济学 会 的 调查 美国 经济学家 之间 已达成 明显 共识 的 议题 包含 了 支持 自由贸易 支持 沃尔玛 等 大型 连锁店 商业 自由 反对 政府 强制 雇主 提供 劳工 健保 允许 商业化 的 器官 转移 开放 赌场 反对 补贴 生物 燃料 等等 其他 议题 例如 中央银行 的 独立 运行 以及 政府 在 透过 中央银行 影响 财政政策 和 货币政策 上 的 做法 乃至 总体 经济学 上 的 众多 政策 也 经常 是 争议 的 焦点 和 对于 主流 经济学 批评 的 来源 而 一些 学者 例如 则 提出 许多 透过 数据 观察 进行 的 经济学 实证 研究 在 方法 或 结果 上 都 有 问题 此点 批评 在 经济学界 受到 不少 重视 不过 也 有 某些 依赖 先验 而 抛弃 实证 观察 作为 研究 方法 的 经济 学者 和 学派 存在 例如 奥地利 经济 学派 便是 一例 一些 人则 责怪 经济学家 无法 准确 预言 未来 的 经济 走向 或 经济危机 的 到来 举例来说 在 年 年 环球 金融危机 便 引发 许多 人 批评 主流 经济学 的 教科书 与 现实 脱离 国际货币基金组织 在 便 曾 发表 他们 对 一群 经济学家 调查 他们 对 未来 经济 萧条 的 预测 结果 提出 在 年代 受 调查 的 经济学家 没有 成功 预测 未来 一年 的 经济 紧缩 而 即使 成功 预测 的 人 也 经常 低估 了 紧缩 的 严重性 经济学 长久 来 持续 被 质疑 是 依靠 不 实际 的 无法 验证 的 或是 过度 简化 的 假说 来 做 为 理论依据 质疑 者 主张 这种 简化 过程 免除 了 经济学家 提出 结论 所 要 举出 的 证据 经常 被 质疑 的 假说 例如 利润 最大化 理性 选择 等等 不过 资讯 经济学 包含 的 就是 这方面 以 数学 研究 和 行为 经济学 来 研究 个体 在 利润 最大化 以外 的 行为 另外 一些 主流 的 经济学家 例如 凯恩斯 也 曾 观察 到 大部分 的 经济学 领域 都 是 透过 概念 上 的 而 非 数据 上 的 证据 来 建立 也 因此 无法 像 其他 自然科学 一样 透过 数据 来 验证 近年来 批评 新古典主义 经济学 的 女性 主义者 也 开始 浮现 促使 了 女性主义 经济学 的 诞生 女性主义 经济学 批评 经济学 一般 对于 实证 和 客观 的 假设 认为 现有 的 模型 和 方法 只 反映 出 男性 社会 的 偏好 女性主义 经济学 经常 提出 的 批评 包括 经济学 忽视 家庭主妇 的 家事 劳动 价值 家庭 的 经济 掌管 和 收支 一些 从 物理学 角度 出发 的 科学家 则 批评 经济学 依靠 的 是 世纪 的 物理学 假设 例如 便 从 热力学 里 提出 了 与 能源 经济学 有关 的 熵 理论 以 区别 他 认为 主流 经济学 依据 在 牛顿 物理学 上 所 建构 的 理论 框架 他 的 理论 对于 热力 经济学 和 生态 经济学 有 相当 的 影响 一些 人 例如 尼可 拉斯 塔雷 伯则 批评 经济学 的 理论 方式 认为 经济学 过度 倚赖 柏拉图 的 理型 论 研究 模型 并 主张 经济学 理论 错误 的 结果 可能 会 对 人类 整体 造成 庞大 灾害 他 以 随机性 和 不确定性 问题 来 质疑 许多 既有 的 经济模型 然而 如同 其他 的 批评 并非 所有 经济学家 倚赖 的 都 是 新 古典 经济学 的 模型 和 假设 而 一些 经济学家 也 正视 了 塔雷 伯 提出 的 问题 例如 诺贝尔经济学奖 得主 丹尼尔 卡内 曼便 对 塔雷 伯 的 理论 赞誉 有嘉而 尽管 这些 批评 的 存在 主流 的 经济学 研究所 课程 已经 发展 得 越来越 趋向于 技术化 和 数学 化 的 研究 方式 11 | -------------------------------------------------------------------------------- /word2vec/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | cmake_minimum_required(VERSION 2.8.9) 2 | project(cw2vec) 3 | 4 | set(CMAKE_MODULE_PATH ${PROJECT_SOURCE_DIR}/cmake) 5 | set (EXECUTABLE_OUTPUT_PATH ${PROJECT_SOURCE_DIR}/bin) 6 | 7 | if(MSVC) 8 | set(LIBS ${LIBS} pthreadVC2) 9 | else() 10 | set(LIBS ${LIBS} pthread) 11 | endif() 12 | 13 | set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -pthread -std=c++11 -w -funroll-loops -O3 -march=native") 14 | 15 | add_subdirectory(src) 16 | -------------------------------------------------------------------------------- /word2vec/bin/word2vec: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/dalinvip/cw2vec/0f0dfb56d9fa8b38df9f210eeb588a8b68e05dc1/word2vec/bin/word2vec -------------------------------------------------------------------------------- /word2vec/build.sh: -------------------------------------------------------------------------------- 1 | rm -rf ../bin 2 | cmake .. -------------------------------------------------------------------------------- /word2vec/build/build.sh: -------------------------------------------------------------------------------- 1 | rm -rf ../bin 2 | cmake .. -------------------------------------------------------------------------------- /word2vec/src/CMakeLists.txt: -------------------------------------------------------------------------------- 1 | 2 | include_directories( 3 | include 4 | ) 5 | 6 | add_executable(word2vec main.cpp) 7 | target_link_libraries(word2vec ${LIBS}) -------------------------------------------------------------------------------- /word2vec/src/include/Utf.h: -------------------------------------------------------------------------------- 1 | // Copyright (C) University of Oxford 2010 2 | /**************************************************************** 3 | * * 4 | * utf.h - the utilities for unicode characters. * 5 | * * 6 | * Author: Yue Zhang * 7 | * * 8 | * Computing Laboratory, Oxford. 2007.6 * 9 | * * 10 | ****************************************************************/ 11 | 12 | #ifndef _UTILITY_UTF_H 13 | #define _UTILITY_UTF_H 14 | 15 | #include 16 | #include 17 | 18 | /*=============================================================== 19 | * 20 | * Unicode std::string and character utils 21 | * 22 | *==============================================================*/ 23 | 24 | /*--------------------------------------------------------------- 25 | * 26 | * getUTF8StringLength - get how many characters are in a UTF8 std::string 27 | * 28 | *--------------------------------------------------------------*/ 29 | 30 | inline 31 | unsigned long int getUTF8StringLength(const std::string &s) { 32 | unsigned long int retval = 0; 33 | unsigned long int idx = 0; 34 | while (idx < s.length()) { 35 | if ((s[idx] & 0x80) == 0) { 36 | ++idx; 37 | ++retval; 38 | } else if ((s[idx] & 0xE0) == 0xC0) { 39 | idx += 2; 40 | ++retval; 41 | } else if ((s[idx] & 0xF0) == 0xE0) { 42 | idx += 3; 43 | ++retval; 44 | } else { 45 | //std::cerr << "Warning: " << "in utf.h getUTF8StringLength: std::string '" << s << "' not encoded in unicode utf-8" << std::endl; 46 | if(s.length()- idx < 4) 47 | { 48 | return retval+1; 49 | } 50 | else 51 | { 52 | idx += 4; 53 | ++retval; 54 | } 55 | } 56 | } 57 | if (idx != s.length()) { 58 | //std::cerr << "Warning: " << "in utf.h getUTF8StringLength: std::string '" << s << "' not encoded in unicode utf-8" << std::endl; 59 | return retval+1; 60 | } 61 | return retval; 62 | } 63 | 64 | /*---------------------------------------------------------------- 65 | * 66 | * getCharactersFromUTF8String - get the characters from 67 | * utf std::string. The characters from 68 | * this std::string are appended 69 | * to a given sentence. 70 | * 71 | *----------------------------------------------------------------*/ 72 | 73 | inline int getCharactersFromUTF8String(const std::string &s, std::vector& sentence) { 74 | sentence.clear(); 75 | unsigned long int idx = 0; 76 | unsigned long int len = 0; 77 | while (idx < s.length()) { 78 | if ((s[idx] & 0x80) == 0) { 79 | sentence.push_back(s.substr(idx, 1)); 80 | ++len; 81 | ++idx; 82 | } else if ((s[idx] & 0xE0) == 0xC0) { 83 | sentence.push_back(s.substr(idx, 2)); 84 | ++len; 85 | idx += 2; 86 | } else if ((s[idx] & 0xF0) == 0xE0) { 87 | sentence.push_back(s.substr(idx, 3)); 88 | ++len; 89 | idx += 3; 90 | } else { 91 | if(s.length()- idx < 4) 92 | { 93 | sentence.push_back(s.substr(idx)); 94 | ++len; 95 | idx = s.length(); 96 | } 97 | else 98 | { 99 | sentence.push_back(s.substr(idx, 4)); 100 | ++len; 101 | idx += 4; 102 | } 103 | } 104 | } 105 | if (idx != s.length()) { 106 | //std::cerr << "Warning: " << "in utf.h getCharactersFromUTF8String: std::string '" << s << "' not encoded in utf-8" << std::endl; 107 | return len+1; 108 | } 109 | 110 | return len; 111 | } 112 | 113 | /*---------------------------------------------------------------- 114 | * 115 | * getFirstCharFromUTF8String - get the first character from 116 | * utf std::string. 117 | * 118 | *----------------------------------------------------------------*/ 119 | 120 | inline std::string getFirstCharFromUTF8String(const std::string &s) { 121 | if (s == "") 122 | return ""; 123 | if ((s[0] & 0x80) == 0) { 124 | return s.substr(0, 1); 125 | } else if ((s[0] & 0xE0) == 0xC0) { 126 | assert(s.length() >= 2); 127 | return s.substr(0, 2); 128 | } else if ((s[0] & 0xF0) == 0xE0) { 129 | assert(s.length() >= 3); 130 | return s.substr(0, 3); 131 | } else { 132 | //std::cerr << "Warning: " << "in utf.h getFirstCharFromUTF8String: std::string '" << s << "' not encoded in unicode utf-8" << std::endl; 133 | if(s.length() < 4) 134 | { 135 | return s; 136 | } 137 | else 138 | { 139 | return s.substr(0, 4); 140 | } 141 | } 142 | } 143 | 144 | /*---------------------------------------------------------------- 145 | * 146 | * getLastCharFromUTF8String - get the last character from 147 | * utf std::string. 148 | * 149 | *----------------------------------------------------------------*/ 150 | 151 | inline std::string getLastCharFromUTF8String(const std::string &s) { 152 | if (s == "") 153 | return ""; 154 | unsigned long int idx = 0; 155 | std::string retval; 156 | while (idx < s.length()) { 157 | if ((s[idx] & 0x80) == 0) { 158 | retval = s.substr(idx, 1); 159 | ++idx; 160 | } else if ((s[idx] & 0xE0) == 0xC0) { 161 | retval = s.substr(idx, 2); 162 | idx += 2; 163 | } else if ((s[idx] & 0xF0) == 0xE0) { 164 | retval = s.substr(idx, 3); 165 | idx += 3; 166 | } else { 167 | //std::cerr << "Warning: " << "in utf.h getLastCharFromUTF8String: std::string '" << s << "' not encoded in unicode utf-8" << std::endl; 168 | if(s.length()- idx < 4) 169 | { 170 | return s; 171 | } 172 | else 173 | { 174 | retval = s.substr(idx, 4); 175 | idx += 4; 176 | } 177 | return s; 178 | } 179 | } 180 | if (idx != s.length()) { 181 | //std::cerr << "Warning: " << "in utf.h getLastCharFromUTF8String: std::string '" << s << "' not encoded in unicode utf-8" << std::endl; 182 | return s; 183 | } 184 | return retval; 185 | } 186 | 187 | /*---------------------------------------------------------------- 188 | * 189 | * isOneUTF8Character - whether a std::string is one utf8 character 190 | * 191 | *----------------------------------------------------------------*/ 192 | 193 | inline bool isOneUTF8Character(const std::string &s) { 194 | if (s == "") 195 | return false; // is no utf character 196 | if (s.size() > 3) 197 | return false; // is more than one utf character 198 | if ((s[0] & 0x80) == 0) { 199 | return s.size() == 1; 200 | } else if ((s[0] & 0xE0) == 0xC0) { 201 | return s.size() == 2; 202 | } else if ((s[0] & 0xF0) == 0xE0) { 203 | return s.size() == 3; 204 | } 205 | } 206 | 207 | inline std::string getUTF8CharType(const std::string &s) { 208 | std::string digit = "0123456789"; 209 | std::string eng = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 210 | std::string defaultType = "default"; 211 | if (s.length() <= 2) { 212 | if (digit.find(s) != -1) { 213 | defaultType = "digit"; 214 | } else if (eng.find(s) != -1) { 215 | defaultType = "eng"; 216 | } 217 | } else { 218 | defaultType = "unitype"; 219 | } 220 | 221 | return defaultType; 222 | } 223 | 224 | inline std::string wordtype(const std::string &s) { 225 | std::vector chars; 226 | getCharactersFromUTF8String(s, chars); 227 | std::string type = ""; 228 | for (int i = 0; i < chars.size(); i++) { 229 | if (chars[i].length() > 1) { 230 | type = type + "u"; 231 | } else if (isdigit(chars[i][0])) { 232 | type = type + "d"; 233 | } else if (isalpha(chars[i][0])) { 234 | if (islower(chars[i][0])) 235 | type = type + "e"; 236 | else 237 | type = type + "E"; 238 | } 239 | } 240 | return type; 241 | } 242 | 243 | inline std::string normalize_to_lowerwithdigit(const std::string& s) 244 | { 245 | std::vector chars; 246 | getCharactersFromUTF8String(s, chars); 247 | std::string lowcase = ""; 248 | for (int i = 0; i < chars.size(); i++) { 249 | if (chars[i].length() > 1) { 250 | lowcase = lowcase + chars[i]; 251 | } else if (isdigit(chars[i][0])) { 252 | lowcase = lowcase + "0"; 253 | } else if (isalpha(chars[i][0])) { 254 | if (islower(chars[i][0])) 255 | { 256 | lowcase = lowcase + chars[i][0]; 257 | } 258 | else 259 | { 260 | char temp = chars[i][0] + 'a'-'A'; 261 | lowcase = lowcase + temp; 262 | } 263 | } 264 | else 265 | { 266 | lowcase = lowcase + chars[i]; 267 | } 268 | } 269 | return lowcase; 270 | } 271 | 272 | 273 | /*---------------------------------------------------------------- 274 | * 275 | * getCharactersFromUTF8String - get the characters from 276 | * utf std::string. The characters from 277 | * this std::string are appended 278 | * to a given sentence. 279 | * 280 | *----------------------------------------------------------------*/ 281 | 282 | inline int getCharactersFromString(const std::string &s, std::vector& sentence) { 283 | sentence.clear(); 284 | unsigned long int idx = 0; 285 | unsigned long int len = 0; 286 | while (idx < s.length()) { 287 | if ((s[idx] & 0x80) == 0) { 288 | sentence.push_back(s.substr(idx, 1)); 289 | ++len; 290 | ++idx; 291 | } else if ((s[idx] & 0xE0) == 0xC0) { 292 | sentence.push_back(s.substr(idx, 2)); 293 | ++len; 294 | idx += 2; 295 | } else if ((s[idx] & 0xF0) == 0xE0) { 296 | sentence.push_back(s.substr(idx, 3)); 297 | ++len; 298 | idx += 3; 299 | } else { 300 | //std::cerr << "Warning: " << "in utf.h getCharactersFromUTF8String: std::string '" << s << "' not encoded in unicode utf-8" << std::endl; 301 | if(s.length()- idx < 4) 302 | { 303 | sentence.push_back(s.substr(idx)); 304 | ++len; 305 | idx = s.length(); 306 | } 307 | else 308 | { 309 | sentence.push_back(s.substr(idx, 4)); 310 | ++len; 311 | idx += 4; 312 | } 313 | } 314 | } 315 | 316 | if (idx != s.length()) { 317 | //std::cerr << "Warning: " << "in utf.h getCharactersFromUTF8String: std::string '" << s << "' not encoded in utf-8" << std::endl; 318 | return len+1; 319 | } 320 | 321 | return len; 322 | } 323 | 324 | #endif 325 | -------------------------------------------------------------------------------- /word2vec/src/include/alphabet.h: -------------------------------------------------------------------------------- 1 | #ifndef _ALPHABET_ 2 | #define _ALPHABET_ 3 | 4 | 5 | /* 6 | please check to ensure that m_size not exceeds the upbound of int32_t 7 | */ 8 | 9 | /* 10 | This class serializes feature from string to int32_t. 11 | Index starts from 0. 12 | */ 13 | 14 | /** 15 | * The basic class of quark class. 16 | * @param std::string String class name to be used. 17 | * @param int32_t ID class name to be used. 18 | * @author Naoaki Okazaki 19 | * @author bamtercelboo (modify) 20 | */ 21 | #include 22 | #include 23 | #include 24 | #include 25 | #include 26 | #include 27 | #include 28 | 29 | #include "args.h" 30 | #include "dictionary.h" 31 | 32 | using namespace std; 33 | 34 | struct Cmp { 35 | std::string word; 36 | int32_t freq; 37 | }; 38 | 39 | bool sort_by_freq(const Cmp &v1, const Cmp &v2) 40 | { 41 | return v1.freq > v2.freq; 42 | } 43 | 44 | class basic_quark { 45 | public: 46 | typedef unordered_map StringToId; 47 | typedef map StringToId_Order; 48 | typedef std::vector IdToString; 49 | typedef std::vector IdToFreq; 50 | 51 | StringToId m_string_to_id; 52 | IdToString m_id_to_string; 53 | IdToFreq m_id_to_freq; 54 | int32_t m_size; 55 | int64_t m_max_freq; 56 | int64_t m_allword_count; 57 | 58 | protected: 59 | int32_t m_max_size; 60 | int32_t m_reduce_threshold; 61 | 62 | public: 63 | /** 64 | * Construct. 65 | */ 66 | basic_quark() { 67 | clear(); 68 | m_reduce_threshold = 1; 69 | m_max_size = 0; 70 | } 71 | 72 | /** 73 | * Destruct. 74 | */ 75 | virtual ~basic_quark() { 76 | } 77 | 78 | inline void setCapacity(int max_size) { 79 | m_max_size = max_size; 80 | } 81 | 82 | 83 | /** 84 | * Map a string to its associated ID. 85 | * If string-to-int32_teger association does not exist, allocate a new ID. 86 | * @param str String value. 87 | * @return Associated ID for the string value. 88 | */ 89 | int32_t from_string(const std::string& str) const { 90 | StringToId::const_iterator it = m_string_to_id.find(str); 91 | if (it != m_string_to_id.end()) { 92 | return it->second; 93 | } else { 94 | return -1; 95 | } 96 | } 97 | 98 | 99 | /** 100 | * Convert ID value int32_to the associated string value. 101 | * @param qid ID. 102 | * @param def Default value if the ID was out of range. 103 | * @return String value associated with the ID. 104 | */ 105 | const std::string& from_id(const int32_t& qid, const std::string& def = "") const { 106 | if (qid < 0 || m_size <= qid) { 107 | return def; 108 | } else { 109 | return m_id_to_string[qid]; 110 | } 111 | } 112 | 113 | 114 | 115 | /** 116 | * Convert string value int32_to the associated ID value. 117 | * @param str String value. 118 | * @return ID if any, otherwise -1. 119 | */ 120 | int32_t add_string(const std::string& str, int64_t freq = 1) { 121 | StringToId::const_iterator it = m_string_to_id.find(str); 122 | if (it != m_string_to_id.end()) { 123 | int32_t qid = it->second; 124 | m_id_to_freq[qid] = m_id_to_freq[qid] + freq; 125 | if(m_id_to_freq[qid] > m_max_freq) m_max_freq = m_id_to_freq[qid]; 126 | m_allword_count += freq; 127 | return it->second; 128 | } else { 129 | int32_t newid = m_size; 130 | m_id_to_string.push_back(str); 131 | m_id_to_freq.push_back(freq); 132 | if(m_size == 0) m_max_freq = freq; 133 | m_allword_count += freq; 134 | m_string_to_id.insert(std::pair(str, newid)); 135 | m_size++; 136 | if (m_size >= m_max_size) { 137 | reduce(); 138 | } 139 | return newid; 140 | } 141 | } 142 | 143 | void clear() { 144 | m_string_to_id.clear(); 145 | m_id_to_string.clear(); 146 | m_id_to_freq.clear(); 147 | m_size = 0; 148 | m_max_freq = 0; 149 | m_allword_count = 0; 150 | } 151 | 152 | /** 153 | * Get the number of string-to-id associations. 154 | * @return The number of association. 155 | */ 156 | size_t size() const { 157 | return m_size; 158 | } 159 | 160 | void prune(int threshold) { 161 | if (m_reduce_threshold >= threshold) { 162 | return; 163 | } 164 | m_reduce_threshold = threshold; 165 | reduce(); 166 | } 167 | 168 | protected: 169 | void reduce() { 170 | //std::cout << "Reaching max size, reducing low-frequency items" << std::endl; 171 | //std::cout << "Current Size: " << m_size << std::endl; 172 | StringToId tmp_string_to_id; 173 | 174 | for (int32_t idx = 0; idx < m_size; idx++) { 175 | if (m_id_to_freq[idx] < m_reduce_threshold) continue; 176 | tmp_string_to_id[m_id_to_string[idx]] = m_id_to_freq[idx]; 177 | } 178 | 179 | clear(); 180 | StringToId_Order tmp_string_to_id_order; 181 | std::vector vector_cmp; 182 | std::vector vector_cmp_eos; 183 | sort_freq(tmp_string_to_id, vector_cmp, vector_cmp_eos); 184 | 185 | for (int32_t i = 0; i < vector_cmp_eos.size(); i++) { 186 | add_string(vector_cmp_eos[i].word, vector_cmp_eos[i].freq); 187 | } 188 | 189 | //std::cout << "Remain Size: " << m_size << std::endl; 190 | std::cout << "(" << m_size << ")" << " "; 191 | std::cout.flush(); 192 | m_reduce_threshold++; 193 | } 194 | 195 | void sort_freq(StringToId &tmp_string_to_id, std::vector &vector_cmp, std::vector &vector_cmp_eos) { 196 | 197 | vector_cmp.clear(); 198 | vector_cmp.resize(tmp_string_to_id.size()); 199 | int64_t id = 0; 200 | for (StringToId::const_iterator it = tmp_string_to_id.begin(); it != tmp_string_to_id.end(); it++) { 201 | vector_cmp[id].word = it->first; 202 | vector_cmp[id].freq = it->second; 203 | id++; 204 | } 205 | 206 | std::sort(vector_cmp.begin(), vector_cmp.end(), sort_by_freq); 207 | 208 | // EOS First Location 209 | bool flag = false; 210 | for (int32_t i = 0; i < vector_cmp.size(); i++) { 211 | if (vector_cmp[i].word == "") { 212 | flag = true; 213 | } 214 | } 215 | if (flag) { 216 | id = 1; 217 | vector_cmp_eos.resize(vector_cmp.size()); 218 | for (int32_t i = 0; i < vector_cmp.size(); i++) { 219 | if (vector_cmp[i].word == "") { 220 | vector_cmp_eos[0].word = vector_cmp[i].word; 221 | vector_cmp_eos[0].freq = vector_cmp[i].freq; 222 | } else { 223 | vector_cmp_eos[id].word = vector_cmp[i].word; 224 | vector_cmp_eos[id].freq = vector_cmp[i].freq; 225 | id++; 226 | } 227 | } 228 | } else { 229 | vector_cmp_eos.resize(vector_cmp.size()); 230 | for (int32_t i = 0; i < vector_cmp.size(); i++) { 231 | vector_cmp_eos[i].word = vector_cmp[i].word; 232 | vector_cmp_eos[i].freq = vector_cmp[i].freq; 233 | } 234 | } 235 | } 236 | }; 237 | 238 | typedef basic_quark alphabet; 239 | 240 | 241 | #endif 242 | 243 | -------------------------------------------------------------------------------- /word2vec/src/include/args.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: bamtercelboo 3 | * @Date: 2018/03/15 4 | * @File: main.cpp 5 | * @Contact: bamtercelboo@{gmail.com, 163.com} 6 | * @Function:None 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | #include 13 | #include 14 | 15 | 16 | enum class model_name : int { skipgram = 1, cbow, subword, substoke}; 17 | enum class loss_name : int {ns = 1}; 18 | 19 | class Args { 20 | protected: 21 | std::string lossToString(loss_name) const; 22 | std::string boolToString(bool) const; 23 | std::string modelToString(model_name) const; 24 | 25 | public: 26 | Args(); 27 | std::string input; 28 | std::string infeature; 29 | std::string output; 30 | double lr; 31 | int lrUpdateRate; 32 | int dim; 33 | int ws; 34 | int epoch; 35 | int minCount; 36 | int minCountLabel; 37 | int neg; 38 | loss_name loss; 39 | model_name model; 40 | int bucket; 41 | int minn; 42 | int maxn; 43 | int thread; 44 | double t; 45 | std::string label; 46 | int verbose; 47 | std::string pretrainedVectors; 48 | std::string featurepad; 49 | bool saveOutput; 50 | 51 | size_t cutoff; 52 | void parseArgs(const std::vector& args); 53 | void printHelp(); 54 | void printBasicHelp(); 55 | void printDictionaryHelp(); 56 | void printTrainingHelp(); 57 | void save(std::ostream&); 58 | void load(std::istream&); 59 | }; 60 | 61 | /** 62 | * @Function: initial Args class argument. 63 | */ 64 | Args::Args() { 65 | lr = 0.05; 66 | dim = 100; 67 | ws = 5; 68 | epoch = 5; 69 | minCount = 10; 70 | neg = 5; 71 | loss = loss_name::ns; 72 | model = model_name::skipgram; 73 | bucket = 2000000; 74 | minn = 3; 75 | maxn = 6; 76 | thread = 1; 77 | lrUpdateRate = 100; 78 | t = 1e-3; 79 | label = "__label__"; 80 | verbose = 2; 81 | pretrainedVectors = ""; 82 | featurepad = 'N'; 83 | saveOutput = false; 84 | } 85 | 86 | /** 87 | * @Function: parseArgs. 88 | */ 89 | void Args::parseArgs(const std::vector& args) { 90 | std::string command(args[1]); 91 | if (command == "cbow") { 92 | model = model_name::cbow; 93 | } else if (command == "subword") { 94 | model = model_name::subword; 95 | } else if ( command == "substoke") { 96 | model = model_name::substoke; 97 | } 98 | for (int ai = 2; ai < args.size(); ai += 2) { 99 | if (args[ai][0] != '-') { 100 | std::cerr << "Provided argument without a dash! Usage:" << std::endl; 101 | printHelp(); 102 | std::getchar(); 103 | exit(EXIT_FAILURE); 104 | } 105 | try { 106 | if (args[ai] == "-h" || args[ai] == "--help") { 107 | std::cerr << "Here is the help information! Usage:" << std::endl; 108 | printHelp(); 109 | //std::getchar(); 110 | exit(EXIT_FAILURE); 111 | } else if (args[ai] == "-input") { 112 | input = std::string(args.at(ai + 1)); 113 | } else if (args[ai] == "-infeature") { 114 | infeature = std::string(args.at(ai + 1)); 115 | } else if (args[ai] == "-output") { 116 | output = std::string(args.at(ai + 1)); 117 | } else if (args[ai] == "-lr") { 118 | lr = std::stof(args.at(ai + 1)); 119 | } else if (args[ai] == "-lrUpdateRate") { 120 | lrUpdateRate = std::stoi(args.at(ai + 1)); 121 | } else if (args[ai] == "-dim") { 122 | dim = std::stoi(args.at(ai + 1)); 123 | } else if (args[ai] == "-ws") { 124 | ws = std::stoi(args.at(ai + 1)); 125 | } else if (args[ai] == "-epoch") { 126 | epoch = std::stoi(args.at(ai + 1)); 127 | } else if (args[ai] == "-minCount") { 128 | minCount = std::stoi(args.at(ai + 1)); 129 | } else if (args[ai] == "-minCountLabel") { 130 | minCountLabel = std::stoi(args.at(ai + 1)); 131 | } else if (args[ai] == "-neg") { 132 | neg = std::stoi(args.at(ai + 1)); 133 | } else if (args[ai] == "-loss") { 134 | if (args.at(ai + 1) == "ns") { 135 | loss = loss_name::ns; 136 | } else { 137 | std::cerr << "Unknown loss: " << args.at(ai + 1) << std::endl; 138 | printHelp(); 139 | exit(EXIT_FAILURE); 140 | } 141 | } else if (args[ai] == "-bucket") { 142 | bucket = std::stoi(args.at(ai + 1)); 143 | } else if (args[ai] == "-minn") { 144 | minn = std::stoi(args.at(ai + 1)); 145 | } else if (args[ai] == "-maxn") { 146 | maxn = std::stoi(args.at(ai + 1)); 147 | } else if (args[ai] == "-thread") { 148 | thread = std::stoi(args.at(ai + 1)); 149 | } else if (args[ai] == "-t") { 150 | t = std::stof(args.at(ai + 1)); 151 | } else if (args[ai] == "-label") { 152 | label = std::string(args.at(ai + 1)); 153 | } else if (args[ai] == "-verbose") { 154 | verbose = std::stoi(args.at(ai + 1)); 155 | } else if (args[ai] == "-pretrainedVectors") { 156 | pretrainedVectors = std::string(args.at(ai + 1)); 157 | } else if (args[ai] == "-saveOutput") { 158 | saveOutput = true; 159 | ai--; 160 | } else if (args[ai] == "-cutoff") { 161 | cutoff = std::stoi(args.at(ai + 1)); 162 | } else { 163 | std::cerr << "Unknown argument: " << args[ai] << std::endl; 164 | printHelp(); 165 | exit(EXIT_FAILURE); 166 | } 167 | } 168 | catch (std::out_of_range){ 169 | std::cerr << args[ai] << "is missing an argument" << std::endl; 170 | printHelp(); 171 | exit(EXIT_FAILURE); 172 | } 173 | } 174 | 175 | if (model == model_name::substoke && infeature == "") { 176 | std::cerr << "substoke need infeature file, [-infeature] is empty." << std::endl; 177 | std::getchar(); 178 | printHelp(); 179 | exit(EXIT_FAILURE); 180 | } 181 | } 182 | 183 | /** 184 | * @Function: print Help information. 185 | */ 186 | void Args::printHelp() { 187 | printBasicHelp(); 188 | printDictionaryHelp(); 189 | printTrainingHelp(); 190 | } 191 | 192 | /** 193 | * @Function: print Help information. 194 | */ 195 | void Args::printBasicHelp() { 196 | std::cerr 197 | << "\n The Following arguments are mandatory:\n" 198 | << " -input training file path\n" 199 | << " -infeature substoke feature file path\n" 200 | << " -output output file path\n" 201 | << "\n The Following arguments are optional:\n" 202 | << " -verbose verbosity level[" << verbose << "]\n" 203 | << std::endl; 204 | } 205 | 206 | /** 207 | * @Function: print Help information. 208 | */ 209 | void Args::printDictionaryHelp() { 210 | std::cerr 211 | << "\nThe following arguments for the dictionary are optional:\n" 212 | << " -minCount minimal number of word occurences default:[" << minCount << "]\n" 213 | << " -bucket number of buckets default:[" << bucket << "]\n" 214 | << " -minn min length of char ngram default:[" << minn << "]\n" 215 | << " -maxn max length of char ngram default:[" << maxn << "]\n" 216 | << " -t sampling threshold default:[" << t << "]\n"; 217 | } 218 | 219 | /** 220 | * @Function: print Help information. 221 | */ 222 | void Args::printTrainingHelp() { 223 | std::cerr 224 | << "\nThe following arguments for training are optional:\n" 225 | << " -lr learning rate default:[" << lr << "]\n" 226 | << " -lrUpdateRate change the rate of updates for the learning rate default:[" << lrUpdateRate << "]\n" 227 | << " -dim size of word vectors default:[" << dim << "]\n" 228 | << " -ws size of the context window default:[" << ws << "]\n" 229 | << " -epoch number of epochs default:[" << epoch << "]\n" 230 | << " -neg number of negatives sampled default:[" << neg << "]\n" 231 | << " -loss loss function {ns} default:[" << lossToString(loss) << "]\n" 232 | << " -thread number of threads default:[" << thread << "]\n" 233 | << " -pretrainedVectors pretrained word vectors for supervised learning default:[" << pretrainedVectors << "]\n" 234 | << " -saveOutput whether output params should be saved default:[" << boolToString(saveOutput) << "]\n"; 235 | } 236 | 237 | /** 238 | * @Function: convert type to string type; 239 | */ 240 | std::string Args::lossToString(loss_name ln) const { 241 | switch (ln) { 242 | case loss_name::ns: 243 | return "ns"; 244 | } 245 | return "Unknow loss!"; 246 | } 247 | 248 | /** 249 | * @Function: convert type to string type; 250 | */ 251 | std::string Args::boolToString(bool b) const { 252 | if (b) { 253 | return "true"; 254 | } else { 255 | return "false"; 256 | } 257 | } 258 | 259 | /** 260 | * @Function: convert type to string type; 261 | */ 262 | std::string Args::modelToString(model_name mn) const { 263 | switch (mn) 264 | { 265 | case model_name::skipgram: 266 | return "skipgram"; 267 | case model_name::cbow: 268 | return "cbow"; 269 | case model_name::subword: 270 | return "subword"; 271 | case model_name::substoke: 272 | return "substoke"; 273 | default: 274 | return "Unknow model name!"; 275 | } 276 | } -------------------------------------------------------------------------------- /word2vec/src/include/dictionary.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: bamtercelboo 3 | * @Date: 2018/03/15 4 | * @File: dictionary.h 5 | * @Contact: bamtercelboo@{gmail.com, 163.com} 6 | * @Function: None 7 | */ 8 | 9 | #pragma once 10 | 11 | #include "args.h" 12 | #include "real.h" 13 | #include "alphabet.h" 14 | #include "Utf.h" 15 | 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | 26 | struct entry { 27 | std::string word; 28 | int64_t count; 29 | std::vector subwords; 30 | }; 31 | 32 | //readfeature 33 | struct feature{ 34 | std::string word; 35 | int32_t count; 36 | std::string subfeature; 37 | }; 38 | 39 | class Dictionary { 40 | protected: 41 | //static const int32_t MAX_VOCAB_SIZE = 100000000; 42 | //static const int32_t MAX_LINE_SIZE = 1000; 43 | static const int32_t MAX_VOCAB_SIZE = 30000000; 44 | static const int32_t MAX_LINE_SIZE = 1024; 45 | 46 | 47 | int32_t findWord(const std::string&) const; 48 | void addWord(const std::string&); 49 | int32_t findTarget(const std::string&) const; 50 | void addTarget(const std::string&, int64_t); 51 | int32_t findFeature(const std::string&) const; 52 | void addFeature(const std::string&, int64_t); 53 | 54 | void initFeature(); 55 | void initTargets(); 56 | void initNgrams(); 57 | 58 | void reset(std::istream&) const; 59 | 60 | std::shared_ptr args_; 61 | alphabet words_; 62 | //std::vector wordprops_; 63 | std::map featuremap; 64 | std::map ::iterator featpos; 65 | alphabet features_; 66 | alphabet targets_; 67 | std::vector pdiscard_; 68 | int64_t ntokens_; 69 | 70 | public: 71 | static const std::string EOS; 72 | static const std::string BOW; 73 | static const std::string EOW; 74 | 75 | explicit Dictionary(std::shared_ptr); 76 | 77 | std::vector wordprops_; 78 | 79 | int32_t nwords() const; 80 | int32_t ntargets() const; 81 | int32_t nfeatures() const; 82 | int64_t ntokens() const; 83 | int32_t getWordId(const std::string&) const; 84 | int32_t getTargetId(const std::string&) const; 85 | int32_t getFeatureId(const std::string&) const; 86 | std::string getWord(int32_t) const; 87 | std::string getTarget(int32_t) const; 88 | std::string getFeature(int32_t) const; 89 | std::string getFeat(std::string); 90 | void trim(std::string&); 91 | 92 | std::vector getCounts() const; 93 | void computeSubwords(const std::string&, std::vector&) const; 94 | void computeSubwords(const std::string&, std::vector&) const; 95 | 96 | 97 | //subfeature 98 | void computerSubfeat(const std::string&, std::vector&) const; 99 | void computerSubfeat(const std::string&, std::vector&) const; 100 | 101 | void initTableDiscard(); 102 | bool discard(int32_t, real) const; 103 | 104 | bool readWord(std::istream&, std::string&) const; 105 | void readFeature(std::istream&); 106 | void readFromFile(std::istream&); 107 | void readFromFile(std::istream&, std::istream&); 108 | //int32_t getLine(std::istream&, std::vector&, std::minstd_rand&) const; 109 | int32_t getLine(std::istream&, std::vector >&, std::vector >&, std::vector&, std::minstd_rand&) const; 110 | int32_t getLine_zh(std::istream&, std::vector >&, std::vector >&, std::vector&, std::minstd_rand&) const; 111 | }; 112 | 113 | const std::string Dictionary::EOS = ""; 114 | const std::string Dictionary::BOW = "<"; 115 | const std::string Dictionary::EOW = ">"; 116 | 117 | /** 118 | * @Function: initial Dictionary class argument. 119 | */ 120 | Dictionary::Dictionary(std::shared_ptr args) : args_(args) { 121 | words_.setCapacity(MAX_VOCAB_SIZE - 1); 122 | features_.setCapacity(MAX_VOCAB_SIZE - 1); 123 | targets_.setCapacity(MAX_VOCAB_SIZE - 1); 124 | } 125 | 126 | /** 127 | * @Function: find word Id. 128 | */ 129 | int32_t Dictionary::findWord(const std::string& w) const { 130 | return words_.from_string(w); 131 | } 132 | 133 | 134 | /** 135 | * @Function: find word Id. 136 | */ 137 | int32_t Dictionary::getWordId(const std::string& w) const { 138 | return findWord(w); 139 | } 140 | 141 | /** 142 | * @Function: find word from Id. 143 | */ 144 | std::string Dictionary::getWord(int32_t id) const { 145 | assert(id >= 0); 146 | assert(id <= words_.m_size); 147 | return words_.from_id(id); 148 | } 149 | 150 | /** 151 | * @Function: add word to alphabet. 152 | */ 153 | void Dictionary::addWord(const std::string& w) { 154 | words_.add_string(w); 155 | } 156 | 157 | /** 158 | * @Function: word count in alphabet. 159 | */ 160 | int32_t Dictionary::nwords() const { 161 | return words_.m_size; 162 | } 163 | 164 | /** 165 | * @Function: find target Id. 166 | */ 167 | int32_t Dictionary::findTarget(const std::string& w) const { 168 | return targets_.from_string(w); 169 | } 170 | 171 | /** 172 | * @Function: find target Id. 173 | */ 174 | int32_t Dictionary::getTargetId(const std::string& w) const { 175 | return findTarget(w); 176 | } 177 | 178 | /** 179 | * @Function: find target from Id. 180 | */ 181 | std::string Dictionary::getTarget(int32_t id) const { 182 | assert(id >= 0); 183 | assert(id < targets_.m_size); 184 | return targets_.from_id(id); 185 | } 186 | 187 | /** 188 | * @Function: add target to alphabet. 189 | */ 190 | void Dictionary::addTarget(const std::string& w, int64_t freq) { 191 | targets_.add_string(w); 192 | } 193 | 194 | /** 195 | * @Function: target count in alphabet. 196 | */ 197 | int32_t Dictionary::ntargets() const { 198 | return targets_.m_size; 199 | } 200 | 201 | /** 202 | * @Function: find feature Id. 203 | */ 204 | int32_t Dictionary::findFeature(const std::string& w) const { 205 | return features_.from_string(w); 206 | } 207 | 208 | /** 209 | * @Function: find feature Id. 210 | */ 211 | int32_t Dictionary::getFeatureId(const std::string& w) const { 212 | return findFeature(w); 213 | } 214 | 215 | /** 216 | * @Function: find feature from Id. 217 | */ 218 | std::string Dictionary::getFeature(int32_t id) const { 219 | assert(id >= 0); 220 | assert(id < features_.m_size); 221 | return features_.from_id(id); 222 | } 223 | 224 | /** 225 | * @Function: add feature to alphabet. 226 | */ 227 | void Dictionary::addFeature(const std::string& w, int64_t freq) { 228 | features_.add_string(w); 229 | } 230 | 231 | /** 232 | * @Function: feature count in alphabet. 233 | */ 234 | int32_t Dictionary::nfeatures() const { 235 | return features_.m_size; 236 | } 237 | 238 | /** 239 | * @Function: target initial. 240 | */ 241 | void Dictionary::initTargets() { 242 | //same as source 243 | for (size_t i = 0; i < words_.m_size; i++) { 244 | addTarget(words_.from_id(i), words_.m_id_to_freq[i]); 245 | } 246 | } 247 | 248 | /** 249 | * @Function: feature initial. 250 | */ 251 | void Dictionary::initFeature() { 252 | // skipgram and cbow model don't need feature 253 | if ((args_->model == model_name::skipgram) || (args_->model == model_name::cbow)) 254 | return; 255 | std::cout << "initail feature, maybe take a while...... " << std::endl; 256 | //subword for english 257 | if (args_->model == model_name::subword) { 258 | std::string word; 259 | for (size_t i = 0; i < words_.m_size; i++) { 260 | if (words_.from_id(i) == EOS) word = ""; 261 | else word = BOW + words_.from_id(i) + EOW; 262 | vector ngrams; 263 | computeSubwords(word, ngrams); 264 | for (size_t j = 0; j < ngrams.size(); j++) { 265 | addFeature(ngrams[j], words_.m_id_to_freq[i]); 266 | } 267 | } 268 | } 269 | 270 | //substoke for chinese word stoke feature 271 | if (args_->model == model_name::substoke) { 272 | std::string word; 273 | std::string feat; 274 | std::string featBE; 275 | for (size_t i = 0; i < words_.m_size; i++) { 276 | word = words_.from_id(i); 277 | feat = getFeat(word); 278 | if (word == EOS) featBE = ""; 279 | else featBE = BOW + feat + EOW; 280 | vector ngrams; 281 | computerSubfeat(featBE, ngrams); 282 | for (size_t j = 0; j < ngrams.size(); j++) { 283 | addFeature(ngrams[j], words_.m_id_to_freq[i]); 284 | } 285 | } 286 | } 287 | std::cout << "initail feature finished. " << std::endl; 288 | } 289 | 290 | /** 291 | * @Function: erase the empty space 292 | */ 293 | void Dictionary::trim(std::string& s) { 294 | int index = 0; 295 | if (!s.empty()) 296 | { 297 | while ((index = s.find(' ', index)) != string::npos) 298 | { 299 | s.erase(index, 1); 300 | } 301 | } 302 | } 303 | 304 | /** 305 | * @Function: get feature from feature map in dictionary. 306 | */ 307 | std::string Dictionary::getFeat(std::string word) { 308 | std::vector char_vec; 309 | getCharactersFromUTF8String(word, char_vec); 310 | std::string feat; 311 | //substoke + word 312 | //feat += word; 313 | for (int i = 0; i < char_vec.size(); i++) { 314 | std::string char_str = char_vec[i]; 315 | //feat += char_str; 316 | featpos = featuremap.find(char_str); 317 | if (featpos != featuremap.end()) { 318 | feat += (*featpos).second; 319 | } 320 | } 321 | trim(feat); 322 | if (feat == "") { 323 | //feat = args_->featurepad; 324 | feat = word; 325 | } 326 | return feat; 327 | } 328 | 329 | /** 330 | * @Function: computer subfeature for chinese character feature, like radaical/stoke. 331 | */ 332 | void Dictionary::computerSubfeat(const std::string& featbe_s, std::vector& substrings) const { 333 | std::vector featbe; 334 | getCharactersFromUTF8String(featbe_s, featbe); 335 | std::string ngram = ""; 336 | for (size_t i = 0; i < featbe.size(); i++) { 337 | for (size_t j = args_->minn; j <= args_->maxn; j++) { 338 | if ((i + j) > featbe.size()) 339 | continue; 340 | 341 | ngram.clear(); 342 | for (size_t k = i; k <(i + j); k++) { 343 | ngram += featbe[k]; 344 | } 345 | substrings.push_back(ngram); 346 | } 347 | } 348 | } 349 | 350 | /** 351 | * @Function: computer subfeature for chinese character feature, like radaical/stoke. 352 | */ 353 | void Dictionary::computerSubfeat(const std::string& word_s, std::vector& ngrams) const { 354 | std::vector word; 355 | getCharactersFromUTF8String(word_s, word); 356 | std::string ngram = ""; 357 | std::vector::iterator it; 358 | for (size_t i = 0; i < word.size(); i++) { 359 | for (size_t j = args_->minn; j <= args_->maxn; j++) { 360 | if ((i + j) > word.size()) 361 | continue; 362 | 363 | ngram.clear(); 364 | for (size_t k = i; k <(i + j); k++) { 365 | ngram += word[k]; 366 | } 367 | int32_t h = findFeature(ngram); 368 | if (h >= 0) 369 | //ngrams.push_back(words_.m_size + h); 370 | ngrams.push_back(h); 371 | } 372 | } 373 | } 374 | 375 | /** 376 | * @Function: computer subword for english. 377 | */ 378 | void Dictionary::computeSubwords(const std::string& word, std::vector& substrings) const { 379 | for (size_t i = 0; i < word.size(); i++) { 380 | std::string ngram; 381 | if ((word[i] & 0xC0) == 0x80) continue; 382 | for (size_t j = i, n = 1; j < word.size() && n <= args_->maxn; n++) { 383 | ngram.push_back(word[j++]); 384 | while (j < word.size() && (word[j] & 0xC0) == 0x80) { 385 | ngram.push_back(word[j++]); 386 | } 387 | if (n >= args_->minn && !(n == 1 && (i == 0 || j == word.size()))) { 388 | substrings.push_back(ngram); 389 | } 390 | } 391 | } 392 | } 393 | 394 | /** 395 | * @Function: computer subword for english. 396 | */ 397 | void Dictionary::computeSubwords(const std::string& word, std::vector& ngrams) const { 398 | for (size_t i = 0; i < word.size(); i++) { 399 | std::string ngram; 400 | if ((word[i] & 0xC0) == 0x80) continue; 401 | for (size_t j = i, n = 1; j < word.size() && n <= args_->maxn; n++) { 402 | ngram.push_back(word[j++]); 403 | while (j < word.size() && (word[j] & 0xC0) == 0x80) { 404 | ngram.push_back(word[j++]); 405 | } 406 | if (n >= args_->minn && !(n == 1 && (i == 0 || j == word.size()))) { 407 | int32_t h = findFeature(ngram); 408 | if (h >= 0)ngrams.push_back(words_.m_size + h); 409 | } 410 | } 411 | } 412 | } 413 | 414 | /** 415 | * @Function: ntokens count. 416 | */ 417 | int64_t Dictionary::ntokens() const { 418 | return ntokens_; 419 | } 420 | 421 | /** 422 | * @Function: Ngrams initial. 423 | */ 424 | void Dictionary::initNgrams() { 425 | wordprops_.resize(words_.m_size); 426 | 427 | std::cout << "initail Ngrams feature, maybe take a while...... " << std::endl; 428 | 429 | if ((args_->model == model_name::skipgram) || (args_->model == model_name::cbow)) { 430 | for (size_t i = 0; i < words_.m_size; i++) { 431 | wordprops_[i].word = words_.from_id(i); 432 | wordprops_[i].count = words_.m_id_to_freq[i]; 433 | 434 | std::string word = (BOW + wordprops_[i].word + EOW); 435 | wordprops_[i].subwords.clear(); 436 | if (wordprops_[i].word != EOS) { 437 | computeSubwords(word, wordprops_[i].subwords); 438 | } 439 | } 440 | } 441 | 442 | if (args_->model == model_name::subword) { 443 | std::string word; 444 | for (size_t i = 0; i < words_.m_size; i++) { 445 | wordprops_[i].word = words_.from_id(i); 446 | wordprops_[i].count = words_.m_id_to_freq[i]; 447 | if (wordprops_[i].word == EOS) 448 | word = ""; 449 | else word = (BOW + wordprops_[i].word + EOW); 450 | wordprops_[i].subwords.clear(); 451 | computeSubwords(word, wordprops_[i].subwords); 452 | } 453 | } 454 | 455 | // substoke ngram 456 | if (args_->model == model_name::substoke) { 457 | std::string featBE; 458 | for (size_t i = 0; i < words_.m_size; i++) { 459 | wordprops_[i].word = words_.from_id(i); 460 | wordprops_[i].count = words_.m_id_to_freq[i]; 461 | std::string feat = getFeat(wordprops_[i].word); 462 | if (wordprops_[i].word == EOS) featBE = ""; 463 | else featBE = BOW + feat + EOW; 464 | wordprops_[i].subwords.clear(); 465 | computerSubfeat(featBE, wordprops_[i].subwords); 466 | } 467 | } 468 | std::cout << "initail Ngrams feature finished. " << std::endl; 469 | } 470 | 471 | /** 472 | * @Function: TableDiscard initial. 473 | */ 474 | void Dictionary::initTableDiscard() { 475 | pdiscard_.resize(words_.m_size); 476 | for (size_t i = 0; i < words_.m_size; i++) { 477 | real f = real(words_.m_id_to_freq[i]) / real(ntokens_); 478 | pdiscard_[i] = std::sqrt(args_->t / f) + args_->t / f; 479 | } 480 | } 481 | 482 | /** 483 | * @Function: None. 484 | */ 485 | bool Dictionary::discard(int32_t id, real rand) const { 486 | assert(id >= 0); 487 | assert(id < words_.m_size); 488 | 489 | return rand > pdiscard_[id]; 490 | } 491 | 492 | /** 493 | * @Function: read word. 494 | */ 495 | bool Dictionary::readWord(std::istream& in, std::string& word) const { 496 | char c; 497 | std::streambuf& sb = *in.rdbuf(); 498 | word.clear(); 499 | while ((c = sb.sbumpc()) != EOF) { 500 | if (c == ' ' || c == '\n' || c == '\r' || c == '\t' || c == '\v' || c == '\f' || c == '\0') { 501 | if (word.empty()) { 502 | if (c == '\n') { 503 | word += EOS; 504 | return true; 505 | } 506 | continue; 507 | } 508 | else { 509 | if (c == '\n') 510 | sb.sungetc(); 511 | return true; 512 | } 513 | } 514 | word.push_back(c); 515 | } 516 | // trigger eofbit 517 | in.get(); 518 | return !word.empty(); 519 | } 520 | 521 | /** 522 | * @Function: read file. 523 | */ 524 | void Dictionary::readFromFile(std::istream& in) { 525 | std::string word; 526 | ntokens_ = 0; 527 | int64_t minThreshold = 1; 528 | while (readWord(in, word)) { 529 | addWord(word); 530 | ntokens_++; 531 | if (ntokens_ % 1000000 == 0 && args_->verbose > 1) { 532 | std::cerr << "\rRead " << ntokens_ / 1000000 << "M words" << std::flush; 533 | } 534 | if (words_.m_size > 0.75 * MAX_VOCAB_SIZE) { 535 | minThreshold++; 536 | words_.prune(minThreshold); 537 | } 538 | } 539 | int64_t words = words_.m_size; 540 | words_.prune(args_->minCount); 541 | 542 | initFeature(); 543 | initTargets(); 544 | initNgrams(); 545 | initTableDiscard(); 546 | 547 | if (args_->verbose > 0) { 548 | std::cerr << "\rRead " << ntokens_ / 1000000 << "M words" << std::endl; 549 | std::cerr << "Number of all words: " << ntokens_ << std::endl; 550 | std::cerr << "Number of all words: " << words << std::endl; 551 | std::cerr << "Number of words: " << words_.m_size << std::endl; 552 | std::cerr << "Number of features: " << features_.m_size << std::endl; 553 | std::cerr << "Number of targets: " << targets_.m_size << std::endl; 554 | } 555 | if (words_.m_size == 0) { 556 | throw std::invalid_argument("Empty vocabulary. Check the input file Or Try a smaller -minCount value."); 557 | } 558 | } 559 | 560 | /** 561 | * @Function: read file. 562 | */ 563 | void Dictionary::readFromFile(std::istream& in, std::istream& infeature) { 564 | std::string word; 565 | ntokens_ = 0; 566 | int64_t minThreshold = 1; 567 | while (readWord(in, word)) { 568 | addWord(word); 569 | ntokens_++; 570 | if (ntokens_ % 1000000 == 0 && args_->verbose > 1) { 571 | std::cerr << "\rRead " << ntokens_ / 1000000 << "M words" << std::flush; 572 | } 573 | if (words_.m_size > 0.75 * MAX_VOCAB_SIZE) { 574 | minThreshold++; 575 | words_.prune(minThreshold); 576 | } 577 | } 578 | 579 | int64_t words = words_.m_size; 580 | words_.prune(args_->minCount); 581 | 582 | //read feature file 583 | readFeature(infeature); 584 | 585 | // initial feature and ngram 586 | initFeature(); 587 | initTargets(); 588 | initNgrams(); 589 | initTableDiscard(); 590 | 591 | if (args_->verbose > 0) { 592 | std::cerr << "\rRead " << ntokens_ / 1000000 << "M words" << std::endl; 593 | std::cerr << "Number of all words: " << ntokens_ << std::endl; 594 | std::cerr << "Number of all words: " << words << std::endl; 595 | std::cerr << "Number of words: " << words_.m_size << std::endl; 596 | std::cerr << "Number of features: " << features_.m_size << std::endl; 597 | std::cerr << "Number of targets: " << targets_.m_size << std::endl; 598 | } 599 | if (words_.m_size == 0) { 600 | throw std::invalid_argument("Empty vocabulary. Check the input file Or Try a smaller -minCount value."); 601 | } 602 | } 603 | 604 | /** 605 | * @Function: read feature file. 606 | */ 607 | void Dictionary::readFeature(std::istream& infeature) { 608 | std::string line; 609 | std::string word; 610 | std::string feat; 611 | featuremap.clear(); 612 | while (std::getline(infeature, line)){ 613 | //std::cout << line << std::endl; 614 | int pos = line.find_first_of(' '); 615 | if (pos == -1) { 616 | std::cerr << "Warning " << line << std::endl; 617 | continue; 618 | } 619 | word = line.substr(0, pos); 620 | feat = line.substr(pos + 1); 621 | //std::cout << word << " && " << feat << std::endl; 622 | featuremap[word] = feat; 623 | } 624 | std::cerr << "\nfeaturemap size " << featuremap.size() << std::endl; 625 | } 626 | 627 | /** 628 | * @Function: reset input iostream. 629 | */ 630 | void Dictionary::reset(std::istream& in) const { 631 | if (in.eof()) { 632 | in.clear(); 633 | in.seekg(std::streampos(0)); 634 | } 635 | } 636 | 637 | /** 638 | * @Function: getCounts. 639 | */ 640 | std::vector Dictionary::getCounts() const { 641 | std::vector counts; 642 | for (int i = 0; i < wordprops_.size(); i++) { 643 | counts.push_back(wordprops_[i].count); 644 | } 645 | return counts; 646 | } 647 | 648 | /** 649 | * @Function: getLine. 650 | */ 651 | int32_t Dictionary::getLine(std::istream& in, std::vector >& sourceTypes, 652 | std::vector >& sources, std::vector& targets, std::minstd_rand& rng) const { 653 | std::uniform_real_distribution<> uniform(0, 1); 654 | std::string token; 655 | vector words; 656 | int32_t ntokens = 0; 657 | 658 | reset(in); 659 | sourceTypes.clear(); 660 | sources.clear(); 661 | targets.clear(); 662 | words.clear(); 663 | while (readWord(in, token)) { 664 | if (token == EOS) 665 | break; 666 | words.push_back(token); 667 | } 668 | 669 | int word_num = words.size(); 670 | int valid = 0; 671 | 672 | for (int i = 0; i < word_num; i++) { 673 | int32_t wid = findWord(words[i]); 674 | int32_t tid = findTarget(words[i]); 675 | ntokens++; 676 | if (wid < 0 || tid < 0 || discard(wid, uniform(rng))) 677 | continue; 678 | valid++; 679 | sourceTypes.push_back(std::vector()); 680 | sources.push_back(std::vector()); 681 | sourceTypes[valid - 1].push_back(0); 682 | sources[valid - 1].push_back(wid); 683 | targets.push_back(tid); 684 | 685 | if (ntokens > MAX_LINE_SIZE) break; 686 | 687 | if ((args_->model == model_name::skipgram) || (args_->model == model_name::cbow)) 688 | continue; 689 | 690 | //sources[valid - 1].pop_back(); 691 | 692 | int ngrams_count = wordprops_[wid].subwords.size(); 693 | for (int j = 0; j < ngrams_count; j++) { 694 | sourceTypes[valid - 1].push_back(0); 695 | sources[valid - 1].push_back(wordprops_[wid].subwords[j]); 696 | } 697 | } 698 | return ntokens; 699 | } 700 | 701 | -------------------------------------------------------------------------------- /word2vec/src/include/fasttext.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: bamtercelboo 3 | * @Date: 2018/03/15 4 | * @File: fasttext.h 5 | * @Contact: bamtercelboo@{gmail.com, 163.com} 6 | * @Function: None 7 | */ 8 | 9 | 10 | #pragma once 11 | 12 | #include 13 | 14 | #include 15 | #include 16 | #include 17 | #include 18 | #include 19 | #include 20 | #include 21 | 22 | #include "args.h" 23 | #include "dictionary.h" 24 | #include "matrix.h" 25 | #include "model.h" 26 | #include "real.h" 27 | #include "utils.h" 28 | 29 | 30 | class FastText { 31 | protected: 32 | std::shared_ptr args_; 33 | std::shared_ptr dict_; 34 | 35 | std::shared_ptr input_; 36 | std::shared_ptr output_; 37 | 38 | std::shared_ptr model_; 39 | 40 | std::atomic tokenCount_; 41 | std::atomic loss_; 42 | 43 | clock_t start_; 44 | 45 | void startThreads(); 46 | 47 | public: 48 | FastText(); 49 | void saveVectors(); 50 | void printInfo(real, real, std::ostream&); 51 | 52 | void skipgram(Model&, real, const std::vector >&, const std::vector&); 53 | void cbow(Model&, real, const std::vector >&, const std::vector&); 54 | void subword(Model&, real, const std::vector >&, const std::vector&); 55 | void substoke(Model&, real, const std::vector >&, const std::vector&); 56 | void trainThread(int32_t); 57 | void train(const Args); 58 | }; 59 | 60 | FastText::FastText() {} 61 | 62 | void FastText::train(const Args args) { 63 | args_ = std::make_shared(args); 64 | dict_ = std::make_shared(args_); 65 | if (args_->input == "-") { 66 | //manage expectations 67 | throw std::invalid_argument("Cannot use stdin for training"); 68 | } 69 | //std::ifstream ifs(args_->input); 70 | std::ifstream ifs(args_->input); 71 | if (!ifs.is_open()) { 72 | throw std::invalid_argument(args_->input + "cannot be opened for training!"); 73 | } 74 | std::cout << "Training From " << args_->input << std::endl; 75 | 76 | if ((args_->model == model_name::skipgram) || (args_->model == model_name::cbow) || (args_->model == model_name::subword)) { 77 | // read file to dict 78 | dict_->readFromFile(ifs); 79 | ifs.close(); 80 | } else if (args_->model == model_name::substoke) { 81 | if (args_->infeature == "") { 82 | throw std::invalid_argument("substoke must be have infeature file [-infeature]"); 83 | } 84 | std::ifstream infeature(args_->infeature); 85 | if (!infeature.is_open()) { 86 | throw std::invalid_argument(args_->infeature + "cannot be opened for training!"); 87 | } 88 | dict_->readFromFile(ifs, infeature); 89 | ifs.close(); 90 | infeature.close(); 91 | } 92 | 93 | input_ = std::make_shared(dict_->nwords() + dict_->nfeatures(), args_->dim); 94 | //input_ = std::make_shared(dict_->nwords() + args_->bucket, args_->dim); 95 | input_->uniform(1.0 / args_->dim); 96 | 97 | output_ = std::make_shared(dict_->nwords(), args_->dim); 98 | output_->zero(); 99 | startThreads(); 100 | model_ = std::make_shared(input_, output_, args_, 0); 101 | model_->setTargetCounts(dict_->getCounts()); 102 | } 103 | 104 | 105 | void FastText::printInfo(real progress, real loss, std::ostream& log_stream) { 106 | // clock_t might also only be 32bits wide on some systems 107 | double t = double(clock() - start_) / double(CLOCKS_PER_SEC); 108 | double lr = args_->lr * (1.0 - progress); 109 | double wst = 0; 110 | int64_t eta = 720 * 3600; // Default to one month 111 | if (progress > 0 && t >= 0) { 112 | eta = int(t / progress * (1 - progress) / args_->thread); 113 | wst = double(tokenCount_) / t; 114 | } 115 | int64_t etam = (eta % 3600) / 60; 116 | int64_t etah = etam / 60; 117 | progress = progress * 100; 118 | log_stream << std::fixed; 119 | log_stream << "Progress: "; 120 | log_stream << std::setprecision(1) << std::setw(5) << progress << "%"; 121 | log_stream << " words/sec/thread: " << std::setw(7) << int64_t(wst); 122 | log_stream << " lr: " << std::setw(9) << std::setprecision(6) << lr; 123 | log_stream << " loss: " << std::setw(9) << std::setprecision(6) << loss; 124 | log_stream << " ETA: " << std::setw(3) << etah; 125 | log_stream << "h" << std::setw(2) << etam << "m"; 126 | log_stream << std::flush; 127 | } 128 | 129 | void FastText::skipgram(Model& model, real lr, const std::vector >& source, 130 | const std::vector& target) { 131 | std::uniform_int_distribution<> uniform(1, args_->ws); 132 | for (int32_t w = 0; w < target.size(); w++) { 133 | int32_t boundary = uniform(model.rng); 134 | const std::vector& ngrams = source[w]; 135 | assert(ngrams.size() == 1); 136 | for (int32_t c = -boundary; c <= boundary; c++) { 137 | if (c != 0 && w + c >= 0 && w + c < target.size()) { 138 | model.update(ngrams, target[w + c], lr); 139 | } 140 | } 141 | } 142 | } 143 | 144 | void FastText::cbow(Model& model, real lr, const std::vector >& source, 145 | const std::vector& target) { 146 | std::vector bow; 147 | std::uniform_int_distribution<> uniform(1, args_->ws); 148 | for (int32_t w = 0; w < target.size(); w++) { 149 | int32_t boundary = uniform(model.rng); 150 | bow.clear(); 151 | for (int32_t c = -boundary; c <= boundary; c++) { 152 | if (c != 0 && w + c >= 0 && w + c < target.size()) { 153 | const std::vector& ngrams = source[w + c]; 154 | bow.insert(bow.end(), ngrams.begin(), ngrams.cend()); 155 | } 156 | } 157 | model.update(bow, target[w], lr); 158 | } 159 | } 160 | 161 | void FastText::subword(Model& model, real lr, const std::vector >& source, const std::vector& target) { 162 | std::uniform_int_distribution<> uniform(1, args_->ws); 163 | for (int32_t w = 0; w < target.size(); w++) { 164 | int32_t boundary = uniform(model.rng); 165 | const std::vector& ngrams = source[w]; 166 | for (int32_t c = -boundary; c <= boundary; c++) { 167 | if (c != 0 && w + c >= 0 && w + c < target.size()) { 168 | model.update(ngrams, target[w + c], lr); 169 | } 170 | } 171 | } 172 | } 173 | 174 | void FastText::substoke(Model& model, real lr, const std::vector >& source, const std::vector& target) { 175 | std::uniform_int_distribution<> uniform(1, args_->ws); 176 | for (int32_t w = 0; w < target.size(); w++) { 177 | int32_t boundary = uniform(model.rng); 178 | const std::vector& ngrams = source[w]; 179 | for (int32_t c = -boundary; c <= boundary; c++) { 180 | if (c != 0 && w + c >= 0 && w + c < target.size()) { 181 | model.update(ngrams, target[w + c], lr); 182 | } 183 | } 184 | } 185 | } 186 | 187 | void FastText::trainThread(int32_t threadId) { 188 | std::ifstream ifs(args_->input); 189 | utils::seek(ifs, threadId * utils::size(ifs) / args_->thread); 190 | 191 | Model model(input_, output_, args_, threadId); 192 | model.setTargetCounts(dict_->getCounts()); 193 | 194 | const int64_t ntokens = dict_->ntokens(); 195 | int64_t localTokenCount = 0; 196 | std::vector > sourceType; 197 | std::vector > source; 198 | std::vector target; 199 | while (tokenCount_ < args_->epoch * ntokens) { 200 | real process = real(tokenCount_) / (args_->epoch * ntokens); 201 | real lr = args_->lr * (1.0 - process); 202 | if (args_->model == model_name::skipgram) { 203 | localTokenCount += dict_->getLine(ifs, sourceType, source, target, model.rng); 204 | skipgram(model, lr, source, target); 205 | } else if (args_->model == model_name::cbow) { 206 | localTokenCount += dict_->getLine(ifs, sourceType, source, target, model.rng); 207 | cbow(model, lr, source, target); 208 | } else if (args_->model == model_name::subword) { 209 | localTokenCount += dict_->getLine(ifs, sourceType, source, target, model.rng); 210 | subword(model, lr, source, target); 211 | } else if (args_->model == model_name::substoke) { 212 | localTokenCount += dict_->getLine(ifs, sourceType, source, target, model.rng); 213 | substoke(model, lr, source, target); 214 | } 215 | if (localTokenCount > args_->lrUpdateRate) { 216 | tokenCount_ += localTokenCount; 217 | localTokenCount = 0; 218 | if (threadId == 0 && args_->verbose > 1) 219 | loss_ = model.getLoss(); 220 | } 221 | } 222 | if (threadId == 0) 223 | loss_ = model.getLoss(); 224 | ifs.close(); 225 | } 226 | 227 | void FastText::startThreads() { 228 | start_ = clock(); 229 | tokenCount_ = 0; 230 | loss_ = -1; 231 | std::vector threads; 232 | for (int32_t i = 0; i < args_->thread; i++) { 233 | threads.push_back(std::thread([=]() { 234 | trainThread(i); 235 | })); 236 | } 237 | const int64_t ntokens = dict_->ntokens(); 238 | // Same condition as trainThread 239 | while (tokenCount_ < args_->epoch * ntokens) { 240 | std::this_thread::sleep_for(std::chrono::milliseconds(100)); 241 | if (loss_ >= 0 && args_->verbose > 1) { 242 | real progress = real(tokenCount_) / (args_->epoch * ntokens); 243 | std::cerr << "\r"; 244 | printInfo(progress, loss_, std::cerr); 245 | } 246 | } 247 | for (int32_t i = 0; i < args_->thread; i++) { 248 | threads[i].join(); 249 | } 250 | if (args_->verbose > 0) { 251 | std::cerr << "\r"; 252 | printInfo(1.0, loss_, std::cerr); 253 | std::cerr << std::endl; 254 | } 255 | } 256 | 257 | void FastText::saveVectors() { 258 | std::cout << "Saving word embedding to " << args_->output << std::endl; 259 | std::cout << "Saving word embedding, maybe take a while......" << std::endl; 260 | int32_t nwords = dict_->nwords(); 261 | int32_t ntargets = dict_->ntargets(); 262 | int32_t nfeatures = dict_->nfeatures(); 263 | 264 | Vector vec(args_->dim); 265 | Vector vec_zero(args_->dim); 266 | vec_zero.zero(); 267 | 268 | if ((nwords > 0 && args_->model == model_name::skipgram) 269 | || (nwords > 0 && args_->model == model_name::cbow)) { 270 | std::ofstream ofs(args_->output + ".vec"); 271 | if (!ofs.is_open()) { 272 | throw std::invalid_argument(args_->output + ".vec" + " cannot be opened for saving source embedding."); 273 | } 274 | ofs << nwords << " " << args_->dim << std::endl; 275 | for (int32_t i = 0; i < nwords; i++){ 276 | std::string word = dict_->getWord(i); 277 | vec.zero(); 278 | vec.addRow(*input_, i); 279 | ofs << word << " " << vec << std::endl; 280 | } 281 | ofs.close(); 282 | } 283 | 284 | if ((nwords > 0 && nfeatures > 0 && args_->model == model_name::substoke) 285 | || (nwords > 0 && nfeatures > 0 && args_->model == model_name::subword)) { 286 | std::string outfile; 287 | if (args_->model == model_name::subword) { 288 | outfile = args_->output + ".vec"; 289 | } else { 290 | outfile = args_->output + ".avg"; 291 | } 292 | std::ofstream ofs(outfile); 293 | if (!ofs.is_open()) { 294 | throw std::invalid_argument( 295 | args_->output + ".avg(vec)" + " cannot be opened for saving average feature embedding."); 296 | } 297 | ofs << nwords << " " << args_->dim << std::endl; 298 | for (int32_t i = 0; i < nwords; i++) { 299 | std::string word = dict_->getWord(i); 300 | std::vector ngrams = dict_->wordprops_[i].subwords; 301 | vec.zero(); 302 | //vec.addRow(*input_, i); 303 | for (int32_t i = 0; i < ngrams.size(); i++) { 304 | //vec.addRow(*input_, nwords + ngrams[i]); 305 | vec.addRow(*input_, ngrams[i]); 306 | } 307 | if (ngrams.size() > 0) { 308 | vec.mul(1.0 / ngrams.size()); 309 | } 310 | ofs << word << " " << vec << std::endl; 311 | } 312 | ofs.close(); 313 | } 314 | 315 | if (nfeatures == -1) { 316 | std::ofstream ofs(args_->output + ".feature"); 317 | if (!ofs.is_open()) { 318 | throw std::invalid_argument( 319 | args_->output + ".feature" + " cannot be opened for saving feature embedding."); 320 | } 321 | ofs << nfeatures << " " << args_->dim << std::endl; 322 | for (int32_t i = 0; i < nfeatures; i++) { 323 | std::string feature = dict_->getFeature(i); 324 | vec.zero(); 325 | //vec.addRow(*input_, nwords + i); 326 | vec.addRow(*input_, i); 327 | ofs << feature << " " << vec << std::endl; 328 | } 329 | 330 | ofs.close(); 331 | } 332 | 333 | if (ntargets > 0 && args_->model == model_name::substoke) { 334 | std::ofstream ofs(args_->output + ".vec"); 335 | if (!ofs.is_open()) { 336 | throw std::invalid_argument(args_->output + ".vec" + " cannot be opened for saving target embedding."); 337 | } 338 | ofs << ntargets << " " << args_->dim << std::endl; 339 | for (int32_t i = 0; i < ntargets; i++) { 340 | std::string word = dict_->getTarget(i); 341 | vec.zero(); 342 | vec.addRow(*output_, i); 343 | ofs << word << " " << vec << std::endl; 344 | } 345 | ofs.close(); 346 | } 347 | std::cout << "Save word embedding finished." << std::endl; 348 | } 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | 358 | -------------------------------------------------------------------------------- /word2vec/src/include/matrix.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #ifndef MATRIX_VECTOR 11 | #define MATRIX_VECTOR 12 | 13 | #include 14 | #include 15 | #include 16 | #include 17 | 18 | #include 19 | #include "real.h" 20 | 21 | #include 22 | #include 23 | #include 24 | #include 25 | 26 | #include "utils.h" 27 | 28 | class Matrix { 29 | protected: 30 | std::vector data_; 31 | const int64_t m_; 32 | const int64_t n_; 33 | 34 | public: 35 | Matrix() : Matrix(0, 0) {} 36 | Matrix(int64_t m, int64_t n) : data_(m * n), m_(m), n_(n) {} 37 | Matrix(const Matrix&) = default; 38 | Matrix& operator=(const Matrix&) = delete; 39 | 40 | inline real* data() { 41 | return data_.data(); 42 | } 43 | 44 | inline const real* data() const { 45 | return data_.data(); 46 | } 47 | 48 | inline const real& at(int64_t i, int64_t j) const { 49 | return data_[i * n_ + j]; 50 | } 51 | 52 | inline real& at(int64_t i, int64_t j) { 53 | return data_[i * n_ + j]; 54 | } 55 | 56 | inline int64_t size(int64_t dim) const { 57 | assert(dim == 0 || dim == 1); 58 | if (dim == 0) { 59 | return m_; 60 | } 61 | return n_; 62 | } 63 | inline int64_t rows() const { 64 | return m_; 65 | } 66 | inline int64_t cols() const { 67 | return n_; 68 | } 69 | 70 | void zero() { 71 | std::fill(data_.begin(), data_.end(), real(0.0)); 72 | } 73 | 74 | void uniform(real a) { 75 | std::minstd_rand rng(1); 76 | std::uniform_real_distribution<> uniform(-a, a); 77 | for (int64_t i = 0; i < (m_ * n_); i++) { 78 | data_[i] = uniform(rng); 79 | } 80 | } 81 | 82 | real dotRow(const std::vector& vec, int64_t i) const { 83 | assert(i >= 0); 84 | assert(i < m_); 85 | assert(vec.size() == n_); 86 | real d = 0.0; 87 | for (int64_t j = 0; j < n_; j++) { 88 | d += at(i, j) * vec[j]; 89 | } 90 | if (std::isnan(d)) { 91 | throw std::runtime_error("Encountered NaN."); 92 | } 93 | return d; 94 | } 95 | 96 | void addRow(const std::vector& vec, int64_t i, real a) { 97 | assert(i >= 0); 98 | assert(i < m_); 99 | assert(vec.size() == n_); 100 | for (int64_t j = 0; j < n_; j++) { 101 | data_[i * n_ + j] += a * vec[j]; 102 | } 103 | } 104 | 105 | void multiplyRow(const std::vector& nums, int64_t ib, int64_t ie) { 106 | if (ie == -1) { 107 | ie = m_; 108 | } 109 | assert(ie <= nums.size()); 110 | for (auto i = ib; i < ie; i++) { 111 | real n = nums[i - ib]; 112 | if (n != 0) { 113 | for (auto j = 0; j < n_; j++) { 114 | at(i, j) *= n; 115 | } 116 | } 117 | } 118 | } 119 | 120 | void divideRow(const std::vector& denoms, int64_t ib, int64_t ie) { 121 | if (ie == -1) { 122 | ie = m_; 123 | } 124 | assert(ie <= denoms.size()); 125 | for (auto i = ib; i < ie; i++) { 126 | real n = denoms[i - ib]; 127 | if (n != 0) { 128 | for (auto j = 0; j < n_; j++) { 129 | at(i, j) /= n; 130 | } 131 | } 132 | } 133 | } 134 | 135 | real l2NormRow(int64_t i) const { 136 | auto norm = 0.0; 137 | for (auto j = 0; j < n_; j++) { 138 | norm += at(i, j) * at(i, j); 139 | } 140 | if (std::isnan(norm)) { 141 | throw std::runtime_error("Encountered NaN."); 142 | } 143 | return std::sqrt(norm); 144 | } 145 | 146 | void l2NormRow(std::vector& norms) const { 147 | assert(norms.size() == m_); 148 | for (auto i = 0; i < m_; i++) { 149 | norms[i] = l2NormRow(i); 150 | } 151 | } 152 | 153 | void save(std::ostream& out) { 154 | out.write((char*)&m_, sizeof(int64_t)); 155 | out.write((char*)&n_, sizeof(int64_t)); 156 | out.write((char*)data_.data(), m_ * n_ * sizeof(real)); 157 | } 158 | 159 | void load(std::istream& in) { 160 | in.read((char*)&m_, sizeof(int64_t)); 161 | in.read((char*)&n_, sizeof(int64_t)); 162 | data_ = std::vector(m_ * n_); 163 | in.read((char*)data_.data(), m_ * n_ * sizeof(real)); 164 | } 165 | 166 | void dump(std::ostream& out) const { 167 | out << m_ << " " << n_ << std::endl; 168 | for (int64_t i = 0; i < m_; i++) { 169 | for (int64_t j = 0; j < n_; j++) { 170 | if (j > 0) { 171 | out << " "; 172 | } 173 | out << at(i, j); 174 | } 175 | out << std::endl; 176 | } 177 | } 178 | 179 | }; 180 | 181 | 182 | class Vector { 183 | public: 184 | std::vector data_; 185 | 186 | public: 187 | Vector(int64_t m) : data_(m) {} 188 | Vector(const Vector&) = delete; 189 | Vector& operator=(const Vector&) = delete; 190 | 191 | inline real* data() { 192 | return data_.data(); 193 | } 194 | inline const real* data() const { 195 | return data_.data(); 196 | } 197 | inline real& operator[](int64_t i) { 198 | return data_[i]; 199 | } 200 | inline const real& operator[](int64_t i) const { 201 | return data_[i]; 202 | } 203 | 204 | inline int64_t size() const { 205 | return data_.size(); 206 | } 207 | 208 | void zero() { 209 | std::fill(data_.begin(), data_.end(), real(0.0)); 210 | } 211 | 212 | real norm() const { 213 | real sum = 0; 214 | for (int64_t i = 0; i < size(); i++) { 215 | sum += data_[i] * data_[i]; 216 | } 217 | return std::sqrt(sum); 218 | } 219 | 220 | void mul(real a) { 221 | for (int64_t i = 0; i < size(); i++) { 222 | data_[i] *= a; 223 | } 224 | } 225 | 226 | void addVector(const Vector& source) { 227 | assert(size() == source.size()); 228 | for (int64_t i = 0; i < size(); i++) { 229 | data_[i] += source.data_[i]; 230 | } 231 | } 232 | 233 | void addVector(const Vector& source, real s) { 234 | assert(size() == source.size()); 235 | for (int64_t i = 0; i < size(); i++) { 236 | data_[i] += s * source.data_[i]; 237 | } 238 | } 239 | 240 | void addRow(const Matrix& A, int64_t i) { 241 | assert(i >= 0); 242 | assert(i < A.size(0)); 243 | assert(size() == A.size(1)); 244 | for (int64_t j = 0; j < A.size(1); j++) { 245 | data_[j] += A.at(i, j); 246 | } 247 | } 248 | 249 | void addRow(const Matrix& A, int64_t i, real a) { 250 | assert(i >= 0); 251 | assert(i < A.size(0)); 252 | assert(size() == A.size(1)); 253 | for (int64_t j = 0; j < A.size(1); j++) { 254 | data_[j] += a * A.at(i, j); 255 | } 256 | } 257 | 258 | void mul(const Matrix& A, const Vector& vec) { 259 | assert(A.size(0) == size()); 260 | assert(A.size(1) == vec.size()); 261 | for (int64_t i = 0; i < size(); i++) { 262 | data_[i] = A.dotRow(vec.data_, i); 263 | } 264 | } 265 | 266 | int64_t argmax() { 267 | real max = data_[0]; 268 | int64_t argmax = 0; 269 | for (int64_t i = 1; i < size(); i++) { 270 | if (data_[i] > max) { 271 | max = data_[i]; 272 | argmax = i; 273 | } 274 | } 275 | return argmax; 276 | } 277 | }; 278 | 279 | 280 | 281 | std::ostream& operator<<(std::ostream& os, const Vector& v) { 282 | os << std::setprecision(5); 283 | for (int64_t j = 0; j < v.size(); j++) { 284 | os << v[j] << ' '; 285 | } 286 | return os; 287 | } 288 | 289 | 290 | #endif -------------------------------------------------------------------------------- /word2vec/src/include/model.h: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: bamtercelboo 3 | * @Date: 2018/03/16 4 | * @File: model.h 5 | * @Contact: bamtercelboo@{gmail.com, 163.com} 6 | * @Function: None 7 | */ 8 | 9 | #pragma once 10 | 11 | #include 12 | #include 13 | #include 14 | #include 15 | 16 | #include "args.h" 17 | #include "matrix.h" 18 | #include "real.h" 19 | 20 | #include 21 | #include 22 | #include 23 | #include 24 | 25 | class Model { 26 | protected: 27 | std::shared_ptr wi_; 28 | std::shared_ptr wo_; 29 | std::shared_ptr args_; 30 | Vector hidden_; 31 | Vector output_; 32 | Vector grad_; 33 | int32_t hsz_; 34 | int32_t osz_; 35 | real loss_; 36 | int64_t nexamples_; 37 | std::vector t_sigmoid_; 38 | std::vector t_log_; 39 | // negative sampling 40 | std::vector negatives_; 41 | size_t negpos; 42 | 43 | int32_t getNegative(int32_t target); 44 | void initSigmoid(); 45 | void initLog(); 46 | 47 | static const int32_t NEGATIVE_TABLE_SIZE = 10000000; 48 | 49 | public: 50 | Model(std::shared_ptr, std::shared_ptr, std::shared_ptr, int32_t); 51 | 52 | real binaryLogistic(int32_t, bool, real); 53 | real negativeSampling(int32_t, real); 54 | 55 | void update(const std::vector&, int32_t, real); 56 | void updatePara(const std::vector&, int32_t, real); 57 | void computeHidden(const std::vector&, Vector&) const; 58 | 59 | void setTargetCounts(const std::vector&); 60 | void initTableNegatives(const std::vector&); 61 | real getLoss() const; 62 | real sigmoid(real) const; 63 | real log(real) const; 64 | real std_log(real) const; 65 | 66 | std::minstd_rand rng; 67 | }; 68 | 69 | constexpr int64_t SIGMOID_TABLE_SIZE = 512; 70 | constexpr int64_t MAX_SIGMOID = 8; 71 | constexpr int64_t LOG_TABLE_SIZE = 512; 72 | 73 | //constexpr int64_t SIGMOID_TABLE_SIZE = 1000; 74 | //constexpr int64_t MAX_SIGMOID = 6; 75 | //constexpr int64_t LOG_TABLE_SIZE = 512; 76 | 77 | Model::Model(std::shared_ptr wi, std::shared_ptr wo, 78 | std::shared_ptr args, int32_t seed):hidden_(args->dim), 79 | output_(wo->size(0)), grad_(args->dim), rng(seed) { 80 | wi_ = wi; 81 | wo_ = wo; 82 | args_ = args; 83 | osz_ = wo->size(0); 84 | hsz_ = args->dim; 85 | negpos = 0; 86 | loss_ = 0.0; 87 | nexamples_ = 1; 88 | t_sigmoid_.reserve(SIGMOID_TABLE_SIZE + 1); 89 | t_log_.reserve(LOG_TABLE_SIZE + 1); 90 | initSigmoid(); 91 | initLog(); 92 | } 93 | 94 | /** 95 | * @Function: initial sigmoid(). 96 | */ 97 | void Model::initSigmoid() { 98 | for (int i = 0; i < SIGMOID_TABLE_SIZE + 1; i++) { 99 | real x = real(i * 2 * MAX_SIGMOID) / SIGMOID_TABLE_SIZE - MAX_SIGMOID; 100 | t_sigmoid_.push_back(1.0 / (1.0 + std::exp(-x))); 101 | } 102 | } 103 | 104 | /** 105 | * @Function: initial log(). 106 | */ 107 | void Model::initLog() { 108 | for (int i = 0; i < LOG_TABLE_SIZE + 1; i++) { 109 | real x = (real(i) + 1e-5) / LOG_TABLE_SIZE; 110 | t_log_.push_back(std::log(x)); 111 | } 112 | } 113 | 114 | /** 115 | * @Function: initial target counts 116 | */ 117 | void Model::setTargetCounts(const std::vector& counts) { 118 | assert(counts.size() == osz_); 119 | if (args_->loss == loss_name::ns) { 120 | initTableNegatives(counts); 121 | } 122 | } 123 | 124 | /** 125 | * @Function: initial Table negatives. 126 | */ 127 | void Model::initTableNegatives(const std::vector& counts) { 128 | real z = 0.0; 129 | for (size_t i = 0; i < counts.size(); i++) { 130 | z += pow(counts[i], 0.5); 131 | } 132 | for (size_t i = 0; i < counts.size(); i++) { 133 | real c = pow(counts[i], 0.5); 134 | for (size_t j = 0; j < c * NEGATIVE_TABLE_SIZE / z; j++) { 135 | negatives_.push_back(i); 136 | } 137 | } 138 | std::shuffle(negatives_.begin(), negatives_.end(), rng); 139 | } 140 | 141 | /** 142 | * @Function: update. 143 | */ 144 | void Model::update(const std::vector& input, int32_t target, real lr) { 145 | assert(target >= 0); 146 | assert(target < osz_); 147 | if (input.size() == 0) 148 | return; 149 | computeHidden(input, hidden_); 150 | if (args_->loss == loss_name::ns) { 151 | loss_ += negativeSampling(target, lr); 152 | } 153 | nexamples_ += 1; 154 | for (auto it = input.cbegin(); it != input.cend(); ++it) { 155 | wi_->addRow(grad_.data_, *it, 1.0); 156 | } 157 | } 158 | 159 | void Model::updatePara(const std::vector& input, int32_t target, real lr) { 160 | vector source; 161 | source.push_back(input[0]); 162 | update(source, target, lr); 163 | 164 | int input_size = input.size(); 165 | if (input_size > 1) { 166 | vector feature; 167 | //for (int i = 0; i < input_size; i++) { 168 | for (int i = 1; i < input_size; i++) { 169 | feature.push_back(input[i]); 170 | } 171 | update(feature, target, lr); 172 | nexamples_ -= 1; 173 | } 174 | } 175 | 176 | /** 177 | * @Function: conpute hidden. 178 | */ 179 | void Model::computeHidden(const std::vector& input, Vector& hidden) const { 180 | assert(hidden.size() == hsz_); 181 | hidden.zero(); 182 | for (auto it = input.cbegin(); it != input.cend(); ++it) { 183 | hidden.addRow(*wi_, *it); 184 | } 185 | hidden.mul(1.0 / input.size()); 186 | } 187 | 188 | /** 189 | * @Function: negative Sampling. 190 | */ 191 | real Model::negativeSampling(int32_t target, real lr) { 192 | real loss = 0.0; 193 | grad_.zero(); 194 | for (int32_t n = 0; n <= args_->neg; n++) { 195 | if (n == 0) { 196 | loss += binaryLogistic(target, true, lr); 197 | } else { 198 | loss += binaryLogistic(getNegative(target), false, lr); 199 | } 200 | } 201 | return loss; 202 | } 203 | 204 | /** 205 | * @Function: binaryLogistic. 206 | */ 207 | real Model::binaryLogistic(int32_t target, bool label, real lr) { 208 | real score = sigmoid(wo_->dotRow(hidden_.data_, target)); 209 | real alpha = lr * (real(label) - score); 210 | grad_.addRow(*wo_, target, alpha); 211 | wo_->addRow(hidden_.data_, target, alpha); 212 | if (label) { 213 | return -log(score); 214 | } else { 215 | return -log(1.0 - score); 216 | } 217 | } 218 | 219 | /** 220 | * @Function: getNegative(). 221 | */ 222 | int32_t Model::getNegative(int32_t target) { 223 | int32_t negative; 224 | do { 225 | negative = negatives_[negpos]; 226 | negpos = (negpos + 1) % negatives_.size(); 227 | } while (target == negative); 228 | return negative; 229 | } 230 | 231 | /** 232 | * @Function: getLoss(). 233 | */ 234 | real Model::getLoss() const { 235 | return loss_ / nexamples_; 236 | } 237 | 238 | /** 239 | * @Function: log(). 240 | */ 241 | real Model::log(real x) const { 242 | if (x > 1.0) { 243 | return 0.0; 244 | } 245 | int64_t i = int64_t(x * LOG_TABLE_SIZE); 246 | return t_log_[i]; 247 | } 248 | 249 | /** 250 | * @Function: std_log(). 251 | */ 252 | real Model::std_log(real x) const { 253 | return std::log(x + 1e-5); 254 | } 255 | 256 | /** 257 | * @Function: sigmoid(). 258 | */ 259 | real Model::sigmoid(real x) const { 260 | if (x < -MAX_SIGMOID) { 261 | return 0.0; 262 | } 263 | else if (x > MAX_SIGMOID) { 264 | return 1.0; 265 | } 266 | else { 267 | int64_t i = int64_t((x + MAX_SIGMOID) * SIGMOID_TABLE_SIZE / MAX_SIGMOID / 2); 268 | return t_sigmoid_[i]; 269 | } 270 | } 271 | -------------------------------------------------------------------------------- /word2vec/src/include/real.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #pragma once 11 | 12 | typedef float real; 13 | 14 | -------------------------------------------------------------------------------- /word2vec/src/include/utils.h: -------------------------------------------------------------------------------- 1 | /** 2 | * Copyright (c) 2016-present, Facebook, Inc. 3 | * All rights reserved. 4 | * 5 | * This source code is licensed under the BSD-style license found in the 6 | * LICENSE file in the root directory of this source tree. An additional grant 7 | * of patent rights can be found in the PATENTS file in the same directory. 8 | */ 9 | 10 | #pragma once 11 | 12 | #include 13 | 14 | #if defined(__clang__) || defined(__GNUC__) 15 | # define FASTTEXT_DEPRECATED(msg) __attribute__((__deprecated__(msg))) 16 | #elif defined(_MSC_VER) 17 | # define FASTTEXT_DEPRECATED(msg) __declspec(deprecated(msg)) 18 | #else 19 | # define FASTTEXT_DEPRECATED(msg) 20 | #endif 21 | 22 | 23 | namespace utils { 24 | int64_t size(std::ifstream& ifs) { 25 | ifs.seekg(std::streamoff(0), std::ios::end); 26 | return ifs.tellg(); 27 | } 28 | 29 | void seek(std::ifstream& ifs, int64_t pos) { 30 | ifs.clear(); 31 | ifs.seekg(std::streampos(pos)); 32 | } 33 | } 34 | 35 | -------------------------------------------------------------------------------- /word2vec/src/main.cpp: -------------------------------------------------------------------------------- 1 | /** 2 | * @Author: bamtercelboo 3 | * @Date: 2018/03/15 4 | * @File: main.cpp 5 | * @Contact: bamtercelboo@{gmail.com, 163.com} 6 | * @Function: None 7 | */ 8 | 9 | #include 10 | #include 11 | #include 12 | 13 | #include "args.h" 14 | #include "fasttext.h" 15 | 16 | 17 | void printUsage() { 18 | std::cerr 19 | << "usage: word2vec \n\n" 20 | << "The commands supported by word2vec are:\n\n" 21 | << " skipgram ------ train word embedding by use skipgram model\n" 22 | << " cbow ------ train word embedding by use cbow model\n" 23 | << " subword ------ train word embedding by use subword(fastetxt skipgram) model\n" 24 | << " substoke ------ train chinses character embedding by use substoke(cw2vec) model\n" 25 | << std::endl; 26 | } 27 | 28 | void train(const std::vector args) { 29 | std::cout << "Train Embedding By Using [" + args[1] + "] model" << std::endl; 30 | Args a = Args(); 31 | a.parseArgs(args); 32 | FastText fasttext; 33 | fasttext.train(a); 34 | fasttext.saveVectors(); 35 | std::cout << "Train Embedding By Using [" + args[1] + "] model have Finished" << std::endl; 36 | } 37 | 38 | int main(int argc, char** argv){ 39 | std::vector args(argv, argv + argc); 40 | if (args.size() < 2) { 41 | printUsage(); 42 | std::getchar(); 43 | exit(EXIT_FAILURE); 44 | } 45 | std::string command(args[1]); 46 | if (command != "skipgram" && command != "cbow" && command != "subword" && command != "substoke") { 47 | std::cerr << "\nError command: " + command << std::endl; 48 | printUsage(); 49 | std::getchar(); 50 | exit(EXIT_FAILURE); 51 | } 52 | // train start 53 | train(args); 54 | std::getchar(); 55 | return 0; 56 | } --------------------------------------------------------------------------------