diff --git a/src/metapy_analyzers.cpp b/src/metapy_analyzers.cpp
index ed56186..dbe060a 100644
--- a/src/metapy_analyzers.cpp
+++ b/src/metapy_analyzers.cpp
@@ -415,6 +415,7 @@ void metapy_bind_analyzers(py::module& m)
         .def("__init__",
              [](ngram_pos_analyzer& ana, uint16_t n, const token_stream& ts,
                 const std::string& crf_prefix) {
+                 py::gil_scoped_release rel;
                  new (&ana) ngram_pos_analyzer(n, ts.clone(), crf_prefix);
              })
         .def("analyze", &ngram_analyze<ngram_pos_analyzer, uint64_t>)
@@ -442,6 +443,7 @@ void metapy_bind_analyzers(py::module& m)
              [](tree_analyzer& ana, const token_stream& ts,
                 const std::string& tagger_prefix,
                 const std::string& parser_prefix) {
+                 py::gil_scoped_release rel;
                  new (&ana)
                      tree_analyzer(ts.clone(), tagger_prefix, parser_prefix);
              })
@@ -452,6 +454,7 @@ void metapy_bind_analyzers(py::module& m)
     py::class_<multi_analyzer>{m_ana, "MultiAnalyzer", analyzer_base};
 
     m_ana.def("load", [](const std::string& filename) {
+        py::gil_scoped_release rel;
         auto config = cpptoml::parse_file(filename);
         return analyzers::load(*config);
     });